Python PyQt线程属性错误
我是PyQt新手,我只想做QThreading。 但我得到了一个错误:AttributeError:“myThread”对象没有属性“ui” 我的代码:Python PyQt线程属性错误,python,multithreading,pyqt,qthread,Python,Multithreading,Pyqt,Qthread,我是PyQt新手,我只想做QThreading。 但我得到了一个错误:AttributeError:“myThread”对象没有属性“ui” 我的代码: from time import sleep from PyQt4.QtGui import * from PyQt4.QtCore import * from takipSistemi import Ui_MainWindow class anaPencere(QMainWindow): def __init__(self):
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?在
anaPencere
和myThread
两个类中,只有第一个类分配了属性self.ui=…
。因为myThread
没有属性ui
所以调用self.ui.tableWidget…
时会出现错误
要解决这个问题,您有几个选项。一种方法是将类anaPencere
的引用传递给它的线程类:
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
作为QThread
的父级),您还可以将self
作为myThread
的\uuuu init\uuuu
中的第二个参数传递
另一个注意事项是:您几乎总是希望将父对象传递给从Qt的QObject
派生的每个新创建的对象(请参见此处:)