PySide关闭窗口函数接收自定义参数

时间:2014-07-28 14:14:22

标签: python pyqt pyside

我有一个主要功能,我在创建一个Control类的实例和一个GuiWindow类的实例。此GuiWindow对象具有接受前面提到的Control类实例作为其参数的方法。但是GuiWindow并没有将Control对象作为自己的属性!当从main函数调用时,它接收它作为自己的方法参数。所以一切正常,GuiWindow有事件监听器,按照他们的说法,他称控制和控制做任何需要做的事情......但是当用户关闭GUI窗口时,Control需要做一些非常重要的事情!

我当前的closeEvent函数的作用如下:

def closeEvent(self, event):

    quit_msg = "Are you sure you want to exit the program?"
    reply = QtGui.QMessageBox.question(self, 'Exit',
            quit_msg, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)

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

如果我想将Control类的对象传递给此closeEvent函数,该怎么办?那可能吗?我不知道如何覆盖closeEvent函数,以便它知道它需要调用一些Control方法。如果我把Control类对象作为closeEvent函数参数,它当然不起作用......

有人有什么想法吗?我应该使用某种信号和事件机制吗?

1 个答案:

答案 0 :(得分:0)

我设法通过使用Signal和Event机制获取Control类的closeEvent函数调用方法。我创建了以下类:

class ExitApp(QtCore.QObject):
    exit_app_signal = QtCore.Signal(str)

    def __init__(self):
        QtCore.QObject.__init__(self)

    def exit_app(self, exit_message):
        self.exit_app_signal.emit(exit_message)

我连接到Control类的所需方法的对象,我以下面的方式调用它:

def closeEvent(self, event):

    quit_msg = "Are you sure you want to exit the program?"
    reply = QtGui.QMessageBox.question(self, 'Exit',
            quit_msg, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)

    if reply == QtGui.QMessageBox.Yes:
        self.exit_app.exit_app('Properly exit.')
        event.accept()
        exit()
    else:
        event.ignore()