# количество аргументов сигнала произволно
# но должно совпадать с количеством учитывающемся в качестве аргументов
# выполняемой функции
from PyQt4 import QtGui, QtCore
import sys
class MyThread(QtCore.QThread):
def __init__(self, parent=None):
QtCore.QThread.__init__(self, parent)
self.running = False
self.count = 0
def run(self):
self.running = True
while self.running:
self.count += 1
self.ss = 'money'
l = [str(self.count), str(self.ss)]
# количество аргументов сигнала произволно
# но должно совпадать с количеством учитывающемся в качестве аргументов
# выполняемой функции
#self.emit(QtCore.SIGNAL("mysignal"), str(self.count), str(self.ss))
self.emit(QtCore.SIGNAL("mysignal"), *l)
self.sleep(1)
class MyWindow(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.label = QtGui.QLabel("Press button for execute thread")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.btnStart = QtGui.QPushButton("Start thread")
self.btnStop = QtGui.QPushButton("Stop thread")
self.vbox = QtGui.QVBoxLayout()
self.vbox.addWidget(self.label)
self.vbox.addWidget(self.btnStart)
self.vbox.addWidget(self.btnStop)
self.setLayout(self.vbox)
self.mythread = MyThread()
self.connect(self.btnStart, QtCore.SIGNAL("clicked()"), self.on_start)
self.connect(self.btnStop, QtCore.SIGNAL("clicked()"), self.on_stop)
self.connect(self.mythread, QtCore.SIGNAL("mysignal"), self.on_change, QtCore.Qt.QueuedConnection)
def on_start(self):
if not self.mythread.isRunning():
self.mythread.start()
def on_stop(self):
self.mythread.running = False
def on_change(self, s, ss):
self.label.setText(s)
print(ss)
#print(ss)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = MyWindow()
window.setWindowTitle("Using class QThread")
window.resize(300, 100)
window.show()
sys.exit(app.exec_())