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?
在 anaPencere
和 myThread
这两个 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
作为 QThread
的 parent
),您还可以将 self
作为 myThread
中的第二个参数传递__init__
.
第二个注意事项:您几乎总是希望将父对象传递给派生自 Qt QObject
的每个新创建的对象(参见此处:)
我是 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?
在 anaPencere
和 myThread
这两个 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
作为 QThread
的 parent
),您还可以将 self
作为 myThread
中的第二个参数传递__init__
.
第二个注意事项:您几乎总是希望将父对象传递给派生自 Qt QObject
的每个新创建的对象(参见此处: