Окно PyQt4 не закрывается должным образом с сигналами и слотами, только кнопка x

Как следует из названия, когда я создаю кнопку или пункт меню для завершения программы, окно не закрывается.

поэтому я пытаюсь понять, как завершить программу и одновременно закрыть окно. Я использовал учебник:

http://zetcode.com/tutorials/pyqt4/

что здорово иначе. Итак, как мне связать кнопку с завершением и закрытием виджета?

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

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
ZetCode PyQt4 tutorial 

This program creates a quit
button. When we press the button,
the application terminates. 

author: Jan Bodnar
website: zetcode.com 
last edited: October 2011
"""

import sys
from PyQt4 import QtGui, QtCore


class Example(QtGui.QWidget):

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

        self.initUI()

    def initUI(self):               

        qbtn = QtGui.QPushButton('Quit', self)
        qbtn.clicked.connect(QtCore.QCoreApplication.instance().quit)
        qbtn.resize(qbtn.sizeHint())
        qbtn.move(50, 50)       

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Quit button')    
        self.show()

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

Спасибо!


person mrfc    schedule 27.05.2012    source источник
comment
qbtn.clicked.connect(QtCore.QCoreApplication.instance().quit) отвечает за подключение сигнала кнопок cliked к слоту приложений quit. Но вставка рабочего примера, вероятно, вам не поможет, вы должны опубликовать свой код, который не работает.   -  person mata    schedule 27.05.2012
comment
Я точно скопировал код из учебника. Так что этот код и мой совпадают. Я еще недостаточно разбираюсь в PyQt4, чтобы создавать свои собственные программы, я только что использовал учебные пособия.   -  person mrfc    schedule 27.05.2012
comment
Ну, этот код работает...   -  person Avaris    schedule 27.05.2012
comment
Я только что попробовал это с помощью PySide (измените импорт PyQt4 на импорт PySide, и это сработало нормально. Это должно быть проблема среды.   -  person Simon Hibbs    schedule 29.05.2012


Ответы (3)


Код работает. У меня такая же проблема, но запустив ее вне IDLE, она работает. Нет необходимости изменять код для вызова метода quit в модуле QtGui.

person danielMartinez    schedule 29.08.2012

Ваше приложение представляет собой QtGui.QApplication, так почему же вы подключаетесь к сигналу выхода с помощью QtCore.QCoreApplication? Изменение этого на QtGui.QApplication.instance().quit работает.

person Ingrid    schedule 27.06.2012

замените qbtn.clicked.connect(QtCore.QCoreApplication.instance().quit) на qbtn.clicked.connect(self.close) Я тоже столкнулся с той же проблемой (пытаясь чтобы изучить Qt4 из тех же руководств по zetcode) и пришел сюда искать решение

person Karthick    schedule 14.10.2015