【问题标题】:Define pyqt4 signals with a list as argument使用列表作为参数定义 pyqt4 信号
【发布时间】:2012-12-23 11:52:30
【问题描述】:

根据

http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html

我可以定义一个带有mysignal = pyqtSignal(int)的整数参数的pyqt4信号。我如何定义一个信号,它接受一个整数和一个字符串列表或更一般地一个名为 myobject 的对象作为参数。

【问题讨论】:

    标签: python signals pyqt4 signals-slots


    【解决方案1】:

    下面的代码创建了一个信号,它接受两个参数:一个整数和一个对象列表。 UI 只包含一个按钮。单击按钮时发出信号。

    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    
    class Foo(object):
        pass
    
    class MyWidget(QWidget):
        mysignal = pyqtSignal(int, list)
    
        def __init__(self, parent=None):
            super(MyWidget, self).__init__(parent)
            self.hlayout = QHBoxLayout()
            self.setLayout(self.hlayout)
            self.b = QPushButton("Emit your signal!", self)
            self.hlayout.addWidget(self.b)
            self.b.clicked.connect(self.clickHandler)
            self.mysignal.connect(self.mySignalHandler)
    
        def clickHandler(self):
            self.mysignal.emit(5, ["a", Foo(), 6])
    
        def mySignalHandler(self, n, l):
            print n
            print l
    
    if __name__ == '__main__':
        import sys
        app = QApplication(sys.argv)
        w = MyWidget()
        w.show()
        sys.exit(app.exec_())
    

    单击按钮时,您应该会看到如下内容:

    5
    ['a', <__main__.Foo object at 0xb7423e0c>, 6]
    

    在您的终端上。

    【讨论】:

    • 天哪,很好的例子! :)
    • 太棒了。这是否有望使 connect() 中的“lambda”死亡?
    • 你还没有使用过pyqtSlot 装饰器。插入后我的段错误消失了,所以我建议将其添加到mySignalHandler
    • 另外,如果您不使用通配符导入,您的答案会更清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多