python - Creating an array of pyqtSignal -


for qthread create array of pyqtsignal

class mythread(qtcore.qthread):     trigger = []     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() 

the main part of following code looks like:

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):         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') 

executing starttestthread leads following error

attributeerror: 'pyqt5.qtcore.pyqtsignal' object has no attribute 'connect'

if initiliaize pyqtsignal without being array, works. doing wrong? in advance!

you cannot create list of pyqtsignal(s).

unfortunately way pyqt implement signals use bit of python magics, , pyqtsignal objects "converted" pyqtboundsignal when qobject subclass (technically class have pyqtwrappertype metaclass) loaded.

you can solve problem in different ways:

1) wrap signal

i'm not 100% sure this, it's modified version of attempt:

class foowrap(qobject):     signal = qtcore.pyqtsignal(int)  class mythread(qtcore.qthread):     trigger = [foowrap] * 10 

2) don't use list

if number of signals fixed, create them directly signal1, signal2, signaln, can call them directly

if can determine signal call @ runtime can signal need using gettattr(object, name) function, example:

getattr(self.myqthread, 'signal' + str(n)).connect(self.update_text) 

and

getattr(self.myqthread, 'signal' + str(n)).emit(value) 

3) use 1 signal

use 1 signal emit 2 values, 1 identify "step" in signal emitted, , second value, doing connected functions can decide based on "step" value.


Comments