PyQt 线程属性错误

PyQt Threading Attributee Error

我是 PyQt 的新手,我只想做 QThreading。 但我收到错误:AttributeError: 'myThread' object has no attribute 'ui'

我的代码:

from time import sleep

from PyQt4.QtGui import *
from PyQt4.QtCore import *
from takipSistemi import Ui_MainWindow



class anaPencere(QMainWindow):
    def __init__(self):
        QWidget.__init__(self)
        self.ui=Ui_MainWindow()
        self.ui.setupUi(self)
        self.thread = myThread()
        self.ui.tableWidget.setItem(0,  0, QTableWidgetItem("hi!"))
        self.thread.start()    

class myThread(QThread):
    def __init__(self,parent=None):
        QThread.__init__(self,parent)
        self.exiting = False

    def __del__(self):
        self.exiting = True
        self.wait()

    def run(self):
        #error
        self.ui.tableWidget.setItem(0 , 0, QTableWidgetItem('hi there!'))

uyg=QApplication([])
pencere=anaPencere()
pencere.show()
uyg.exec_()

如何将 ui 归因于 myThread?

anaPenceremyThread 这两个 class 中,只有第一个分配了 self.ui = ... 属性。因为 myThread 没有属性 ui 调用 self.ui.tableWidget....

时出现错误

要解决此问题,您有多种选择。一种是将 class anaPencere 的引用传递给它的线程 class:

class anaPencere(QMainWindow):

    def __init__(self):
        QWidget.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.thread = myThread(self)
        self.ui.tableWidget.setItem(0,  0, QTableWidgetItem("hi!"))
        self.thread.start()


class myThread(QThread):

    def __init__(self,parent=None):
        QThread.__init__(self, parent)
        self.exiting = False

    def __del__(self):
        self.exiting = True
        self.wait()

    def run(self):
        self.parent().ui.tableWidget.setItem(0 , 0, QTableWidgetItem('hi there!'))

如果这种方法(使用 anaPencere 作为 QThreadparent),您还可以将 self 作为 myThread 中的第二个参数传递__init__.

第二个注意事项:您几乎总是希望将父对象传递给派生自 Qt QObject 的每个新创建的对象(参见此处: