У меня есть QWidget
, который вызывает некоторый код python с помощью QThread
. Этот код также выполняет некоторую логику и вызывает другой класс. В этом классе я хочу передать сигнал до моего QWidget
, чтобы напечатать «Hello World». Код в его нынешнем виде дает ошибку sm instance has no attribute 'sayHello'
, которую я знаю - я просто не знаю, как сделать метод run
вызовом другого класса, чтобы все сигналы работали.PyQt4: наследование QThread
widget.py
from prog import TaskThread
from PyQt4 import QtCore, QtGui
class MyWidget(QtGui.QWidget):
def __init__(self):
self.btn = QtGui.QPushButton('Run!', self)
self.btn.clicked.connect(self.onStart)
self.myLongTask = TaskThread()
self.myLongTask.sayHello.connect(self.sayHi)
def onStart(self):
self.myLongTask.start()
def sayHi(self):
print "hello world"
prog.py
from PyQt4 import QtCore
from sm import sc
class TaskThread(QtCore.QThread):
sayHello = QtCore.pyqtSignal()
def run(self):
sm.sc()
sm.py
class sc():
def __init__(self):
for i in range(0,50):
print i
if i == 5: self.sayHello.emit()
Это работает благодаря; Я думаю, что простота ответа показывает мое отсутствие понимания OO Python! Однако, это лучший способ сделать это, или есть альтернативные способы, которые я, вероятно, не понял? – ChrisW