Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySide关闭窗口函数接收自定义参数_Python_Pyqt_Pyside - Fatal编程技术网

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

Python PySide关闭窗口函数接收自定义参数,python,pyqt,pyside,Python,Pyqt,Pyside,我在创建一个Control类的实例和一个GuiWindow类的实例时使用了main函数。此GUI窗口对象具有接受前面提到的控件类实例作为其参数的方法。但是GuiWindow没有控件对象作为它自己的属性!当从主函数调用时,它将其作为自己方法的参数接收。所以一切正常,GuiWindow有事件监听器,他根据这些监听器调用控件,控件做它需要做的任何事情。。。但当用户关闭GUI窗口时,控件需要做一些非常重要的事情 我当前的closeEvent函数只执行以下操作: def closeEvent(self,

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

我当前的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()
如果我想将控件类的对象传递给这个closeEvent函数,该怎么办?可能吗?我不知道如何覆盖closeEvent函数,以便它知道需要调用一些控制方法。如果我将控件类对象作为closeEvent函数参数,它当然不起作用


有人知道吗?我应该使用某种信号和事件机制吗

我通过使用信号和事件机制获得了我的控制类的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)
我将哪个对象连接到我的控件类的所需方法,并以以下方式调用它:

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()