Welcome!
This is the community forum for my apps Pythonista and Editorial.
For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.
Another dialogue issue
-
@cvp it hangs when I run this script, after it displays the form dialog
-
@Tel ok, sorry, I had understood that Pythonista did hang at its start and that you can't do anything. My fault, thus not so vital 😀
-
@Tel did you try
@ui.in_background def parse(st) :
-
@cvp better, but not working correctly. Try this, you will see that the NewLink ()returns None before the input is processed
import sys, dialogs import ui import console global theView class MyView(ui.View): last_content_offset = (-1,-1) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.make_view() self.value = None def make_view(self): self.tv= ui.TextView(title='textview1', frame=self.bounds.inset(10,10),editable = False, border_width=2, bg_color='white', flex='hw') self.update_interval = 1/60 self.tv.height = self.bounds.height-70 self.add_subview(self.tv) tf = ui.TextField(frame = self.bounds.inset(10, 10), text_color='red') #print (self.bounds) tf.frame=(10,240,self.bounds.width-20,40) tf.height =32 tf.delegate = self tf.flex = 'w' tf.begin_editing() self.add_subview(tf) def update(self) : self.tv.content_offset = (0, self.tv.content_size[1] - self.tv.height) if self.tv.content_offset[1] < 0: self.tv.content_offset = (0,0) #if self.tv.content_offset != MyView.last_content_offset : #print ('*',self.tv.content_offset, self.tv.content_size, #self.height) MyView.last_content_offset = self.tv.content_offset def feedback(self, st): self.tv.text += st +'\n' def textfield_did_change(self, textfield): self.value = textfield.text def textfield_should_return(self, textfield): st = textfield.text self.tv.text += '>'+ st + '\n' theModel.parse(st) textfield.text='' return True def delayed_close(self) : self.feedback('shutting down...') ui.delay(self.close, 5) def feedback(st): global theView theView.feedback(st) def startView(): global theView theView = MyView(frame = (0,0,430,300), bg_color='white') theView.present(style='sheet', animated=False) return theView class Model() : def parse(self,st) : print('after calling NewLink:',NewLink(st)) @ui.in_background def NewLink(st): fields = [{'title':'name','type':'text','value':st} ] result = dialogs.form_dialog(title='Link design', done_button_title='ok',fields=fields, sections=None) feedback(str(result)) print('from parse after dialog:',result) if __name__ == "__main__": console.clear() #show just ui theModel= Model() startView()
-
@Tel Try this 😂, it seems to work
#@ui.in_background def NewLink(st):
-
@cvp nope, it hangs for me.
-
@Tel WoW, it runs ok for me
-
sorry for this obvious question, but you are sure you tap on ok?
-
@cvp yes. I am going to shut this topic down. No one will read a topic with 50 posts
-
@Tel Ok, but a topic is not specially for other people than the guy who created it.
I was still trying to find a solution but your script is ok for me with or without the @ui.in_background.
It prints the "after dialog" only when I press the ok. -
@cvp but don’t you see that Newlink return None, before that?
This is the output when I type “This string” in the viewafter calling NewLink: None
from parse after dialog: {'name': 'This string'} -
@Tel Yes, I've seen but the only one print that proves, for me, that the wait_modal is ended is the "from parse", and this one comes only after I've pressed ok.
I agree it is strange -
@cvp so, back to my original point, the dialog should block the return out of Newlink, but it doesn’t. And there is nothing for me to put a wait_modal() on.
-
@Tel Could you, please, for my pleasure, try this modification and tell me if the print "after dialog" comes after you pressed ok
def textfield_should_return(self, textfield): st = textfield.text self.tv.text += '>'+ st + '\n' NewLink(st) #theModel.parse(st)
-
@cvp of course, but in order to see what’s happening you need to insert
print(NewLink(st))And you will see the same thing happens.
-
@Tel I really don't understand why you need this print because it will print the result of newlink it the print "after dialog" also.
-
@cvp that print is just to prove that NewLink has completed before the dialog OK has been pressed. Therefore the dialog did not block.
-
So NewLink() has completed. Now if there is a return(result) at the end of NewLink(), after the print, where does it return to?
-
@Tel ok, I can't help more, I'm sorry
-
@cvp thanks for your patience.