Mystilleef wrote:
> Calling Dialog's run method in a thread will crash your app. I learned
> the hard way (weeks of debugging). I use Windows instead of Dialogs
> now. Manage showing and hiding the window yourself.
>> Cheers
>> On Feb 18, 2008 7:26 AM, Steve McClure <smcclure at racemi.com> wrote:
>
I use this to get a dialog from a thread. I have a function to
display the dialog, and call this with an idle_add() in the Thread.
def displaymessage(self, message) :
dialog = gtk.MessageDialog(self.window.window, gtk.DIALOG_MODAL,
gtk.MESSAGE_INFO,
gtk.BUTTONS_CANCEL, message);
dialog.connect('response', lambda w,d: dialog.destroy())
dialog.set_position(gtk.WIN_POS_MOUSE)
dialog.show()
gobject.idle_add(self.displaymessage, "My error message")
>>>>On Feb 18, 2008, at 7:19 AM, Adolfo González Blázquez wrote:
>>>>>>>El sáb, 16-02-2008 a las 14:19 +1300, John Stowers escribió:
>>>>>>>On Fri, 2008-02-15 at 14:05 +0100, Adolfo González Blázquez wrote:
>>>>>>>>>Hello,
>>>>>>>>>>I'm writing a little app that needs 2 windows, a main window, and
>>>>>another for entering data. I'm writing it using Glade, so both
>>>>>windows
>>>>>are defined in one glade file. The second one, emulates a entry
>>>>>dialog,
>>>>>and is modal.
>>>>>>>>>>My problem is that i want the second window displayed when i
>>>>>click in a
>>>>>button in the main window, and then, when i press "Close" in the
>>>>>second
>>>>>window, get the text and do some things, and update the main window
>>>>>status bar.
>>>>>>>>I dont quite understand you here, it doesnt sound like a threads
>>>>issue,
>>>>more a design issue.
>>>>>>>>When I want to return stuff from a dialog I typically create my own
>>>>dialog subclass [1] which returns a tuple of the dialog specific
>>>>information from the (overridden run method). For example (excuse
>>>>broken
>>>>pseudocode)
>>>>>>>>class MyDialog(gtk.Dialog)
>>>> def __init__(self, setting1, setting2, setting3)
>>>> #call super
>>>> #save old settings
>>>> self.oldsetting1 = setting1
>>>> ...etc
>>>> #construct dialog
>>>> self.widget1 = gtk.Entry()
>>>> self.widget1.set_text(setting1)
>>>> ...etc
>>>>>>>> def run(self):
>>>> if gtk.Dialog.run(self) == gtk.RESPONSE_OK:
>>>> setting1 = self.widget1.get_text()
>>>> setting2 = self.widget2.get_text()
>>>> setting3 = self.widget3.get_text()
>>>> return setting1, setting2, setting3
>>>> else:
>>>> return self.oldsetting1, self.oldsettin2,
>>>>self.oldsetting3
>>>>>>>>then run it with
>>>>dialog = MyDialog(a,b,c)
>>>>a,b,c = dialog.run()
>>>>dialog.distroy()
>>>>>>Well, I've subclassed gtk.Dialog as you point, and I'm still having
>>>the
>>>same issue.
>>>>>>I run the dialog, enter the data and click OK. Then it was supposed to
>>>hide the dialog, and update the statusbar while things are happening,
>>>but in fact the gui freezes till the end.
>>>>Dialog.run() is the "problem".
>>From
>>http://www.pygtk.org/pygtk2reference/class-gtkdialog.html#method->>gtkdialog--run
>>"The run() method blocks in a recursive main loop until the dialog
>>either emits the "response" signal, or is destroyed"
>>>>To get the behavior you want, you need to set up a callback for the
>>OK button which fetches the text and performs the desired action.
>>>>>>>>>The related code is here:
>>>http://pastebin.com/mb2ea398>>>>>>And a screencast of what is happening in here:
>>>http://www.infinicode.org/code/out.ogg>>>>>>Any idea?
>>>>>>>>>>Regards,
>>>>>>>>John
>>>>>>>>[1] http://davyd.livejournal.com/237414.html>>>>>>>>>>>>>Here's a screencast of what i'm doing:
>>>>>http://www.infinicode.org/code/out.ogg>>>>>>>>>>What it was supposed to do is:
>>>>>- Open the add window
>>>>>- Enter the text and click close
>>>>>- The add window closes
>>>>>- In the main window status bar appears "Conectando..."
>>>>>- The status bar changes to "Conectado!"
>>>>>- A error dialog appers
>>>>>>>>>>Relevant code here:
>>>>>http://pastebin.com/f6bf4e71b>>>>>>>>>>>>>>>Thanks in advance for any help
>>>>>>>>>>-- adolfo
>>>>>_______________________________________________
>>>>>pygtk mailing list pygtk at daa.com.au>>>>>http://www.daa.com.au/mailman/listinfo/pygtk>>>>>Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/>>>>>>>_______________________________________________
>>>pygtk mailing list pygtk at daa.com.au>>>http://www.daa.com.au/mailman/listinfo/pygtk>>>Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/>>>>--
>>Steve McClure
>>smcclure at racemi.com>>>>