【发布时间】:2016-07-21 14:28:30
【问题描述】:
对于 QThread,我想创建一个 pyqtSignal 数组
class MyThread(QtCore.QThread):
Trigger = []
for i in range(0,10):
Trigger.append(QtCore.pyqtSignal(int))
def __init__(self, Function):
self.Function = Function
super(MyThread, self).__init__(None)
def run(self):
self.Function()
以下代码的主要部分如下所示:
class Main(QtWidgets.QMainWindow):
def __init__(self):
self.MyQThread = MyThread(lambda: self.PrintTest(5))
def StartTestThread(self):
self.MyQThread.Trigger[0].connect(self.update_text)
self.MyQThread.start()
def PrintTest(self,InputValue):
for i in range (0,100):
print(InputValue*i)
time.sleep(0.2)
self.MyQThread.Trigger[0].emit(5)
def update_text(self, thread_no):
self.ui.MY_LISTWIDGET.addItem('123')
执行 StartTestThread 会导致以下错误
AttributeError: 'PyQt5.QtCore.pyqtSignal' 对象没有属性 '连接'
如果我初始化 pyqtSignal 而不是数组,它可以工作。 我究竟做错了什么?我在这里先向您的帮助表示感谢!
【问题讨论】:
-
还建立了一个 Wrap 函数: class FooWrap(): Signal = QtCore.pyqtSignal(int) Then class MyThread(QtCore.QThread): Trigger = [FooWrap] * 10 and later on self.MyQThread .Trigger[0].Signal.connect(self.update_text) 导致同样的错误...
-
为什么要这样做?听起来有点像 XY 问题……
-
因为我要设置一个类,它可以有很多pyqtSignals。在少数情况下,我需要多个信号,因为在代码的不同步骤中会出现不同的信号。
-
@three_pineapples :提供更多细节:我正在为我正在攻读博士学位的物理实验开发一个新的 gui。我想从异步线程中连续禁用、启用按钮和更新 gui。
-
酷(我也在攻读物理学博士学位!)。我建议您在下面的答案中选择选项 3。只需使用一个信号并发出一个参数列表,让您的插槽确定要做什么。