【问题标题】:Python PySide Event HandlingPython PySide 事件处理
【发布时间】:2017-09-26 09:08:34
【问题描述】:

我不太了解 PySide 中的事件处理。 当我尝试类似:

exitAction.triggered.connect(self.close)

exitAction 以前是 QAction 用于退出程序的地方,它工作得很好。但是当我做类似的东西时怎么会

newAction.triggered.connect(QMessageBox.information(self, 'New document', "New document is being created...", QMessageBox.Ok))

它不工作?每当我启动程序时,它都会显示 QMessageBox,而不是当我单击工具栏/菜单栏上的 QAction 时。由于单击 QAction,我将如何继续实现 QMessageBox?非常感谢任何帮助!

【问题讨论】:

    标签: python user-interface event-handling pyqt pyside


    【解决方案1】:

    当你连接一个信号时,你必须指定它所连接的槽而不实际调用槽。请注意,在exitAction.triggered.connect(self.close) 中,close 之后没有括号。如果你写exitAction.triggered.connect(self.close())close 方法将在你连接信号时执行(在程序启动时)。这在您的第二个示例中发生了。

    如果尚不存在完全符合您要求的插槽,则您必须自己创建它(使用信号预期的参数)。例如:

    import sys
    
    from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication, QMessageBox
    
    class MainWindow(QMainWindow):
        def __init__(self, parent=None):
            super(MainWindow, self).__init__(parent)
            self.button = QPushButton('Click me!')
            self.setCentralWidget(self.button)
    
            self.button.clicked.connect(self.btnClicked)
    
        def btnClicked(self):
            QMessageBox.information(self, 'New document', 
                "New document is being created...", QMessageBox.Ok)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        mainWindow = MainWindow()
        mainWindow.show()
        app.exec_() 
    

    请注意,Qt Signals 和 Qt Events 不一样! (你的标题说的是事件,但你的帖子是关于信号的)。一般来说,我会使用信号,并且只有在没有信号可以执行您想做的事情时才使用事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多