PySide 关闭窗口函数传递自定义参数
我在主函数里创建了一个Control类的实例和一个GuiWindow类的实例。这个GuiWindow对象有一些方法,这些方法需要之前提到的Control类的实例作为参数。不过,GuiWindow并没有把Control对象当作自己的属性!它是在主函数调用时,把Control对象作为参数传给自己的方法。所以一切都能正常工作,GuiWindow有事件监听器,根据这些监听器来调用Control,而Control则执行它需要做的事情……但是,当用户关闭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
我成功地通过信号和事件机制来调用我控制类中的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()