我是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):
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?
答案 0 :(得分:0)
在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
作为parent
的{{1}}),您也可以将QThread
作为self
中的第二个参数传递给myThread
。 s __init__
。
在第二个注释中:您几乎总是希望将父对象传递给每个从Qt QObject
派生的新创建对象(请参阅此处:https://stackoverflow.com/a/30354276/6205205)