Использование app.exec() вместо sys.exit(app.exec_()) с PyQT4 в Spyder не будет работать.

Я разрабатываю программу PyQT, используя Spyder IDE (которая использует IPython) на компьютере с Windows 7, и у меня возникли проблемы с оператором sys.exit(app.exec_()). я прочитал этот пост

Что за ошибка при закрытии диалогового окна

и попытался использовать только app.exec_(). Однако, когда я использую только app.exec_(), графический интерфейс открывается на короткое время, а затем сразу же закрывается. Вот мой минимальный (не) рабочий пример:

import sys
from PyQt4 import QtGui

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        btn = QtGui.QPushButton('Button', self)   
        self.show()

def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    app.exec_()
    #sys.exit(app.exec_())

if __name__ == '__main__':
    main()

Это мой первый пост в stackoverflow, поэтому, если я могу как-то его улучшить, дайте мне знать.


person dyson    schedule 21.03.2016    source источник
comment
При дальнейшем расследовании выясняется, что это проблема конкретно Spyder, а не IPython в целом. Я запустил приведенный выше код в блокноте Jupyter, и он без проблем создал графический интерфейс. Поэтому любое понимание того, почему это не работает в Spyder, будет высоко оценено. Спасибо.   -  person dyson    schedule 21.03.2016


Ответы (1)


Я понял решение. По-видимому, вам вообще не нужно включать app.exec_(), согласно

http://cyrille.rossant.net/making-pyqt4-pyside-and-ipython-work-together/

В Spyder работает следующий код:

import sys
from PyQt4 import QtGui

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        btn = QtGui.QPushButton('Button', self)   
        self.show()

ex= Example() 
person dyson    schedule 22.03.2016