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 <[EMAIL PROTECTED]> 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   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

--
Steve McClure
[EMAIL PROTECTED]



_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Reply via email to