向 pyqtSignal 发送未知数量的参数

问题描述 投票:0回答:2

我想向 pyqtSignal 发出未知数量的参数

例如当将未知参数传递给 def 时:-

def oPrint(*args):
    print(args)

我想对 pyqtSignal 做同样的事情。即:-

class UI(QMainWindow):
    msgSig = pyqtSignal(*object) #this gives error
python python-3.x pyqt5 signals
2个回答
1
投票

TL;博士; Qt 需要知道参数的数量,因此无法满足您的要求。


解决方法是使用某些容器作为列表或元组。

class UI(QMainWindow):
    msgSig = pyqtSignal(list)
ui = Ui()
l = [1, "2", 3, "4"]
ui.msgSig.emit(l)
def oPrint(args):
    print(args)

0
投票

您需要发出一个元组/列表, 但接收者可以有任意数量的参数!

通过写这样的东西:

class UI(QMainWindow):
    msg_sig = pyqtSignal(Any)

    def __init__(self):
        self.msg_sig.connect(lambda r: self.out(*r), Qt.QueuedConnection)

    def xx(self):
        self.msg_sig.emit([1, 2, 3])

    def out(args1, args2, args3):
        print(args1, args2, args3)

为了让它更好,您可以编写自己的发出函数,接受一个信号和任意数量的参数,然后将所有参数作为一个列表发出。

© www.soinside.com 2019 - 2024. All rights reserved.