2017-04-13 6 views
0

Ich bin neu auf PyQt und ich möchte nur QThreading tun. Aber ich bin immer Fehler: Attribute:PyQt Threading Attribut Fehler

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_() 

Wie kann ich auf myThread ui Attribut: 'myThread' Objekt kein Attribut 'ui'

Mein Code hat?

Antwort

0

Von den beiden Klassen anaPencere und myThread ist nur dem ersten das Attribut self.ui = ... zugeordnet. Weil myThread kein Attribut ui hat, erhalten Sie den Fehler beim Aufruf self.ui.tableWidget....

Um dies zu beheben haben Sie mehrere Möglichkeiten. Man wäre eine Referenz der Klasse übergeben anaPencere seiner Thread-Klasse:

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!')) 

Wenn dieser Ansatz (anaPencere als parent von QThread verwenden) Sie auch self als zweites Argument in myThread ‚s __init__ passieren konnte.

Auf einer zweiten Notiz: Sie fast immer ein übergeordnetes Objekt zu jedem neu erstellten Objekt zu übergeben wollen, die von Qt leitet QObject (siehe hier: https://stackoverflow.com/a/30354276/6205205)