【问题标题】:pyqt clicked.connect signaling more than one eventpyqt clicked.connect 发出多个事件的信号
【发布时间】:2013-09-24 12:11:41
【问题描述】:

我在 pyQt gui 中有一个按钮,它使用 functools.partial 向外部类方法发出信号:

self.Valve_ON.clicked.connect(functools.partial(self.ValveControl.IO_on,6008))

我还希望能够在状态栏中显示一条消息

self.statusBar().showMessage("Valve on")

如何在一次点击时发出多个事件的信号。

谢谢

【问题讨论】:

    标签: pyqt


    【解决方案1】:

    为信号创建一个插槽并从那里运行您的代码,如下所示:

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    #---------
    # IMPORT
    #---------
    import sys
    
    from PyQt4 import QtGui, QtCore
    
    #---------
    # DEFINE
    #---------
    class MyWindow(QtGui.QMainWindow):
        _numberClicked = 0
    
        def __init__(self, parent=None):
            super(MyWindow, self).__init__(parent)
    
            self.centralwidget = QtGui.QWidget(self)
    
            self.pushButtonClick = QtGui.QPushButton(self.centralwidget)
            self.pushButtonClick.setText("Click Me!")
            self.pushButtonClick.clicked.connect(self.on_pushButtonClick_clicked)
    
            self.labelClicked = QtGui.QLabel(self)
    
            self.layoutVertical = QtGui.QVBoxLayout(self.centralwidget)
            self.layoutVertical.addWidget(self.pushButtonClick)
            self.layoutVertical.addWidget(self.labelClicked)
    
            self.statusbar = QtGui.QStatusBar(self)
            self.statusbar.setObjectName("statusbar")
    
            self.setCentralWidget(self.centralwidget)
            self.setStatusBar(self.statusbar)
    
        @QtCore.pyqtSlot()
        def on_pushButtonClick_clicked(self):
            self._numberClicked += 1
    
            message = "Clicked {0} time(s)".format(self._numberClicked)
    
            self.labelClicked.setText(message)
            self.statusbar.showMessage(message, 1111)
    
    #---------
    # MAIN
    #---------
    if __name__ == "__main__":    
        app = QtGui.QApplication(sys.argv)
        app.setApplicationName('MyWindow')
    
        main = MyWindow()
        main.resize(333, 111)
        main.show()
    
        sys.exit(app.exec_())
    

    【讨论】:

      【解决方案2】:

      您可以根据需要将任意数量的插槽连接到信号:

      self.Valve_ON.clicked.connect(functools.partial(self.ValveControl.IO_on,6008))
      self.Valve_ON.clicked.connect(functools.partial(self.statusBar().showMessage,"Valve on"))
      

      当您单击按钮时,两者都应该触发。

      signal 可以连接到任意数量的slots,slot 可以连接任意数量的signals。图书馆会为您整理所有的调度。

      【讨论】:

        猜你喜欢
        • 2017-10-13
        • 2018-08-02
        • 2016-11-16
        • 2011-08-16
        • 2016-02-04
        • 2021-12-17
        • 2018-01-15
        • 2013-07-01
        • 2021-07-20
        相关资源
        最近更新 更多