Forum Archive

Something wrong in my custom view

Enez Houad

I need a custom alert to wait for a task to be completed (the message changes during the task). This task can come more than one time in the app. I’ve tried many way to do this but there’s always something going wrong. As English is not my native language, it’s difficult for me to explain all my trials. Here is a simplified version of my script, can you help me please ? Thanks.

```
import ui

class WaitClass(ui.View):

def __init__(self):
    waitView = ui.View(name='waitView', frame=(0, 0, 320, 240))
    l = ui.Label(name='label', frame=(0, 70, 320, 40))
    waitView.add_subview(l)
    self.add_subview(waitView)

def present(self):
    self['waitView'].present('sheet', hide_title_bar=True, hide_close_button=True)

def close(self):
    self['waitView'].close()
    self.remove_subview(self['waitView'])

def message(self, msg):
    self['waitView']['label'].text = msg

def show(self):
    n = 100000
    for i in range(n):
        self.message(f'{i}/{n}')

def wait(sender):
v = WaitClass()
v.present()
v.show()
v.close()

if name=='main':
vp = ui.View(background_color='white')
b = ui.Button(frame=(10, 10, 60, 30), title='Press', action = wait)
vp.add_subview(b)
vp.present('full-screen')```

mikael

@Enez-Houad, main thing to remember with these things is that you need to let the UI thread/loop to actually display the changes you are making. For example, the tight loop you have updating the message will only ever display the last value set, and even then it loooks like you are already closing the view.

Things to look at might be ui.delay and console.hud_alert.

cvp

@Enez-Houad same kind of answer here

Enez Houad

Thanks for your answers, my problem is to find in English and in Pythonista what to search on the forum and that's sometimes difficult. Fortunately, there's alwais someone who is patient enough to explain ;-)
A simple @ui.in_background was the solution…

```
import ui

class WaitClass(ui.View):
def init(self):
waitView = ui.View(name='waitView', frame=(0, 0, 240, 120))

    l = ui.Label(name='label', frame=(0, 0, 240, 40))
    l.center = waitView.center
    l.alignment = ui.ALIGN_CENTER
    waitView.add_subview(l)
    self.add_subview(waitView)

def present(self):
    self.subviews[0].present('sheet', hide_title_bar=True, hide_close_button=True)

def close(self):
    self.subviews[0].close()

def message(self, msg):
    self.subviews[0]['label'].text = str(msg)

def count(self):
    n = 100
    for i in range(n):
        self.message(f'{i}/{n}')

———————————————————————————————————————————————————————————————————

@ui.in_background
def wait(sender):
v = WaitClass()
v.present()
v.count()
v.close()

if name=='main':
vp = ui.View(name = 'Vue principale', frame=(0, 0, 512, 384), background_color='white')
b = ui.Button(frame=(10, 10, 60, 30), title='Pressez ici.', action = wait)
b.center = vp.center
vp.add_subview(b)
vp.present('sheet')```