LINUX.ORG.RU

Вопрос по event в qt. Реализовал вопрос при выходе, как мне кажется, не самым лучшим образом.

 , ,


0

1
import sys
from PyQt4 import QtGui, QtCore



class QuitButton(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Icon')

        button = QtGui.QPushButton('Close', self)
        button.setGeometry(10, 10, 60, 35)
        self.connect(button, QtCore.SIGNAL('clicked()'), self.CloseQuestion)
        

    def CloseQuestion(self):
        reply = QtGui.QMessageBox.question(self, 'Message',
            "Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)

        if reply == QtGui.QMessageBox.Yes:
            sys.exit(app.exec_())
        
    
    def closeEvent(self, event):
        reply = QtGui.QMessageBox.question(self, 'Message',
            "Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)

        if reply == QtGui.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()


app = QtGui.QApplication(sys.argv)
qb = QuitButton()
qb.show()
sys.exit(app.exec_())

Метод «CloseQuestion»: после нажатия на кнопку «Close» спрашивает, точно ли я хочу выйти. Метод «closeEvent» делает, чтобы был вопрос при закрытии приложения из системы.

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

В общем, сделал отдельный слот. Можно ли было как-нибудь реализовать вариант выше? Например, ввести какой-то аргумент.



Последнее исправление: kramh (всего исправлений: 4)

Можно ли было как-нибудь реализовать вариант выше?

Close events are sent to widgets that the user wants to close, usually by choosing «Close» from the window menu, or by clicking the X title bar button. They are also sent when you call QWidget::close() to close a widget programmatically.

Давай я открою документацию за тебя?

CrossFire ★★★★★
()
Последнее исправление: CrossFire (всего исправлений: 1)
Ответ на: комментарий от CrossFire

Я не очень понимаю твой посыл. То есть QWidget::close() мне нужно куда-то вставить в код, чтобы закрыть приложение? А к чему это, если меня конкретно диалоговые окна интересуют?

kramh
() автор топика
Ответ на: комментарий от CrossFire

Я хочу реализовать диалоговые окна при выходе менее кодоёмко, а точнее использовать метод closeEvent в качестве слота для button. Но я не могу closeEvent подключить как слот, потому что требует ввести аргумент event.

Можно ли это как-то обойти? Например, подставив требуемый аргумент event в приёмник, в коннекте. Или я решил поставленную задачу наиболее верным способом?

kramh
() автор топика
Ответ на: комментарий от CrossFire

Чтобы было понятнее, вот как я хочу сделать, но тут требует аргумент.

import sys
from PyQt4 import QtGui, QtCore



class QuitButton(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Icon')

        button = QtGui.QPushButton('Close', self)
        button.setGeometry(10, 10, 60, 35)
        self.connect(button, QtCore.SIGNAL('clicked()'), self.closeEvent)
        
    def closeEvent(self, event):
        reply = QtGui.QMessageBox.question(self, 'Message',
            "Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)

        if reply == QtGui.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()


app = QtGui.QApplication(sys.argv)
qb = QuitButton()
qb.show()
sys.exit(app.exec_())

kramh
() автор топика
Ответ на: комментарий от kramh

Тяжело же будет разбираться с Qt без знания английского. Хоть книжку на русском советую прочитать, все легче станет.

CrossFire ★★★★★
()
Ответ на: комментарий от CrossFire

Да ниче, буду постепенно учить. Надо же когда-то начинать

kramh
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.