【问题标题】:PySide close window function receiving custom argumentsPySide 关闭窗口函数接收自定义参数
【发布时间】:2014-07-28 23:29:58
【问题描述】:

我在创建一个 Control 类的实例和一个 GuiWindow 类的实例时具有 main 函数。这个 GuiWindow 对象的方法接受前面提到的 Control 类的实例作为它们的参数。但是 GuiWindow 没有 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 函数参数,它当然不起作用...

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

【问题讨论】:

    标签: python pyqt pyside


    【解决方案1】:

    我设法通过使用信号和事件机制获得了我的 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() 
    

    【讨论】:

      猜你喜欢
      • 2017-03-17
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      相关资源
      最近更新 更多