多线程&类中的方法缺少位置参数,尽管它们被传递

时间:2018-06-13 13:22:05

标签: python multithreading pyqt

我有一个包含不同单元格的表格,每当它们的值发生变化时我想要着色0.2秒(如果新值更低则为红色,如果更高则为绿色)。所以我的想法是每次从数据库中读取一个新值,创建一个新的线程,只需将单元格的颜色更改为红色/绿色0.2秒,然后将其更改回白色,然后杀死该线程,以便我不要以1000000个不同的线程结束:

class DataStream(Thread):
    def __init__(self,queue):
        Thread.__init__(self)
        self.queue = queue

    def run(self):
        #(HERE GOES CODE LISTENING TO SOME DATA, IRRELEVANT FOR DISCUSSION)
        if doc['new_val'][new] > doc['old_val'][new]:
            flag = 1
        elif doc['new_val'][new] < doc['old_val'][new]:
            flag = -1
        queue = Queue()
        flash = ColorCells(queue,flag,ui.parameters.item(maturity_dates.index(exp),h_headers.index(new)))
        flash.daemon = True
        flash.start()

class ColorCells(Thread):
    def __init__(self,queue,flag,item):
        Thread.__init__(self)
        self.queue = queue
        self.flag = flag
        self.item = item
        self.run(self.flag,self.item)

    def run(self,flag,item):
        if flag == 1:
            colorb = QtGui.QColor(0,255,0)
        elif flag == -1:
            colorb = QtGui.QColor(255,0,0)
        item.setBackground(colorb)
        time.sleep(0.2)
        item.setBackground(QtGui.QColor(255,255,255))
        self._stop()

对于您的信息,我将它与PyQt一起使用,因此项变量和ui.parameters.item(x,y)表示我想要将颜色更改为的单元格。

我得到的错误是我在run()方法(标志和项目)中缺少2个位置参数。我还想知道我是否正确使用ColorCells.run()中的self.stop()来杀死线程。谢谢!

0 个答案:

没有答案