When I open a new GUI, I check to see if there already is a
QApplication and create one only if none exists, same with the
specific main window I want to open:

   app = QtGui.QApplication.instance()
   if app :
      warnings.warn( "QApplication instance already exists!",
category=UserWarning, stacklevel=1 )
   else :
      app = QtGui.QApplication(sys.argv)

   haveWindow = False
   windowList = app.topLevelWidgets()
   for foundWindow in windowList :
      if foundWindow.objectName() == 'myWindowName' :
         haveWindow = True
         window = foundWindow

   if not haveWindow :
      window = QtGui.QMainWindow()
      window.setObjectName("myWindowName")

So far I have not needed globals or pumpThread...

will.
On Jun 17, 4:21 am, Pierre A <[email protected]> wrote:
> Thanks for the help!
>
> I've found the mistake. QApplication was instantiated more than one
> time because a little "app.quit()" was hidden somewhere... Now I have
> two GUI behaving correctly (well, I hope so)
>
> By the way, if pumpThread is not the more elegant workaround, is there
> any other ( and smarter :) ) way to do this? Why do we need to call a
> refresh thread that calls every 0.01 sec : utils.executeDeferred
> ( app.processEvents() )?
> Can't we simply launch QApplicaton and all the GUI in another thread?
> Sorry to bother you with that, I think this issue must have been
> already pushed in the list.
>
> Thanks again
> Pierre
>
> On 16 juin, 22:22, John Creson <[email protected]> wrote:
>
>
>
> > Also,
>
> > you can’t have more than one qt.QApplication(sys.argv) running at once.
>
> > In your second example, you are using pumpThread which works around defining
> > the app in a bad way, but then you re-define it the way that doesn't make
> > maya happy.
>
> > Perhaps just comment out the app= line in the second example.
>
> > They can all call pumpThread, since this is protected from starting more
> > than once.
>
> > On Tue, Jun 16, 2009 at 4:10 PM, John Creson <[email protected]> wrote:
> > > I think this may be Python cleaning up :)
>
> > > Once your GUIs start getting more complex, you have to use the global
> > > application
>
> > > instantiation and global windows variables.
>
> > > If you don't use both the global application instantiation and global
> > > windows variables,
>
> > > then the resultant GUI will appear and disappear very quickly as Python
> > > cleans up its
>
> > > local variables.
>
> > > import sys
>
> > > import PyQt4 as qt
>
> > > app=None
>
> > > win=None
> > > def windo():
>
> > > global app
> > > global win
> > > app = qt.QApplication(sys.argv)
> > > win = qt.QLabel("Hello world!",None)
> > > win.show()
>
> > > windo()
>
> > > On Tue, Jun 16, 2009 at 3:52 PM, Pierre A <[email protected]
> > > > wrote:
>
> > >> Hi,
>
> > >> I'm experiencing a strange behavior with modal dialogs.
> > >> Let's see the following code snippet: (Im in a method's class context)
>
> > >> def launchDialog(self):
> > >>    diag = QtGui.QDialog(self)
> > >>    ret = diag.exec_()
> > >>    print ret
>
> > >> I can see the dialog during a few miliseconds, then it disapears. The
> > >> return value is always 0
>
> > >> Now, another piece of code:
> > >> def launchDialog(self):
> > >>    self.diag = QtGui.QDialog(self)
> > >>    ret = self.diag.exec_()
> > >>    print ret
>
> > >> I'm just adding the dialog as a member of the class. The dialog
> > >> becomes modal, but exec_() returns immediately.
>
> > >> I have the same problems with the convenience methods of
> > >> QtGui.QMessageBox and QtGui.QInputDialog, they are closed immediately
> > >> too...
>
> > >> I'm in a particular state in maya. I have two different GUI launched.
> > >> They both use pumpthread:
> > >> ## LAUNCH APP
> > >> window = None
> > >> app = None
> > >> def LaunchApp():
> > >>    global app
> > >>    global window
> > >>    pt.initializePumpThread()
> > >>    app = QtGui.QApplication(sys.argv)
> > >>    window = MyWindowClass()
> > >>    window.show()
>
> > >> If only one GUI is launched, diag.exec_() doesn't disappear. :'( But I
> > >> really need to have multiple windows
> > >> I'm stuck! I don't know how to solve this. Perhaps I could instanciate
> > >> the QtApp in another module which would act as a singleton and share
> > >> the QApplication with the different GUI?
>
> > >> Thanks!
>
> > >> Pierre
--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/python_inside_maya
-~----------~----~----~----~------~----~------~--~---

Reply via email to