On 10/22/2014 11:26 PM, Sean Fisk wrote: > Hi Jim, > > With all due respect to the author of the book, I don’t think this is a > very good example. The most important thing to realize is that nothing > really happens before the event loop is started. The line: > > myApp.exec_() > > is what starts the event loop. Without the event loop running, windows > won’t appear, user input cannot be handled, and basically nothing > QtGui-related will work. *Even if* windows show up before the event loop is > started, they won’t be able to respond to user interaction (as far as I > understand). > > I would personally achieve the desired behavior like so: > > #!/usr/bin/env python > import sys > from PySide import QtCore, QtGui > class SampleWindow(QtGui.QWidget): > def __init__(self, parent=None): > super(SampleWindow, self).__init__(parent) > self.setWindowTitle('Sample Window') > self.setGeometry(300, 300, 200, 150) > self.setMinimumHeight(100) > self.setMinimumWidth(250) > self.setMaximumHeight(200) > self.setMaximumWidth(800) > > @QtCore.Slot() > def do_resize(self): > self.resize(300, 300) > self.setWindowTitle('Sample Window Resized') > def main(argv): > app = QtGui.QApplication(argv) > > # Create and show the window. > window = SampleWindow() > window.show() > # PySide windows don't auto-raise on Mac OS X. > window.raise_() > > # Set up a timer to fire 3 seconds *after the event loop starts*. > QtCore.QTimer.singleShot(3000, window.do_resize) > > # Start the event loop. Nothing Qt-related happens until this call. > return app.exec_() > if __name__ == '__main__': > raise SystemExit(main(sys.argv)) > > The key take-away is that nothing QtGui-related *actually* happens before > the event loop is started, and everything is done by the time that it exits. > > Hope this helps. Feel free to let me know if anything doesn’t make sense. >
Thanks for the code and the explanation. It works and I can follow it and understand what is happening. Thanks, Jim > > -- > Sean Fisk > > On Wed, Oct 22, 2014 at 8:17 PM, Jim Byrnes <jf_byr...@comcast.net> wrote: > >> In looking at the lists archives, I see that most of the participants >> seem to be experienced developers. As a novice programmer I hope I am >> not intruding by asking some basic questions. >> >> I am working my way through examples in a PySide book I bought. >> According to the author the example should display a 200 x 150 window, >> pause 3 seconds and then display a 300 x 300 window. On my system >> (Ubuntu 12.04) there is a approx 3 second delay after starting the >> program and then I see the 300 x 300 window. I never see the first window. >> >> Could someone explain to me why it does not act as described? >> >> # Import required modules >> import sys >> import time >> from PySide.QtGui import QApplication, QWidget >> >> class SampleWindow(QWidget): >> """ Our main window class >> """ >> >> # Constructor function >> def __init__(self): >> QWidget.__init__(self) >> self.setWindowTitle("Sample Window") >> self.setGeometry(300, 300, 200, 150) >> self.setMinimumHeight(100) >> self.setMinimumWidth(250) >> self.setMaximumHeight(200) >> self.setMaximumWidth(800) >> >> if __name__ == '__main__': >> # Exception Handling >> try: >> myApp = QApplication(sys.argv) >> myWindow = SampleWindow() >> myWindow.show() >> time.sleep(3) >> myWindow.resize(300, 300) >> myWindow.setWindowTitle("Sample Window Resized") >> myWindow.repaint() >> myApp.exec_() >> sys.exit(0) >> except NameError: >> print("Name Error:", sys.exc_info()[1]) >> except SystemExit: >> print("Closing Window...") >> except Exception: >> print (sys.exc_info()[1]) >> >> Thanks, Jim >> >> _______________________________________________ >> PySide mailing list >> PySide@qt-project.org >> http://lists.qt-project.org/mailman/listinfo/pyside >> > > > > _______________________________________________ > PySide mailing list > PySide@qt-project.org > http://lists.qt-project.org/mailman/listinfo/pyside > _______________________________________________ PySide mailing list PySide@qt-project.org http://lists.qt-project.org/mailman/listinfo/pyside