Ahoj,
s PySide jsem si nedávno hrál a protože podobný problém brzo budu taky řešit, cvičně jsem napsal kraťoučký program na vyzkoušení. Evidentně s PySide a signály máš zkušenost, tak kód snad nebude potřebovat rozsáhlejší komentář, pokud ano, klidně dovysvětlím. Jde jen o to, že ve třídě nadefinuješ signál, který emituješ a v druhé třídě na něj jednoduše napojíš pomocí connect metodu, která od něj zpracuje data. Příklad je trochu delší, ale Tebe budou zajímat jen poslední tři řádky v initu MainWindow a třída Thread, zbytek je GUI a blbiny okolo :)
import time
from PySide.QtGui import QWidget, QMainWindow, QApplication, QHBoxLayout, QLabel
from PySide.QtCore import QThread, Signal, Qt
import sys
class Thread(QThread):
dataSignal = Signal(object)
def run(self):
while True:
self.generate_data()
self.dataSignal.emit(self.data)
def generate_data(self):
self.data = time.ctime()
time.sleep(5)
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
# GUI
centralWidget = QWidget()
layout = QHBoxLayout()
layout.addWidget(QLabel("Time: "))
self.timeLabel = QLabel("?")
layout.addWidget(self.timeLabel)
centralWidget.setLayout(layout)
self.setCentralWidget(centralWidget)
# thread a zpracovani
self.thread = Thread()
self.thread.dataSignal.connect(self.present_data, Qt.QueuedConnection)
self.thread.start()
def present_data(self, data):
self.timeLabel.setText(data)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())