我有一個派生多線程的PySide(Qt)GUI。線程有時需要更新GUI。我已經通過以下方式解決了這個問題:PySide:從另一個線程更新GUI更容易的方法
class Signaller(QtCore.QObject) :
my_signal = QtCore.Signal(QListWidgetItem, QIcon)
signaller = Signaller()
class MyThread(threading.Thread):
def __init__(self):
super(IconThread, self).__init__()
# ...
def run(self) :
# ...
# Need to update the GUI
signaller.my_signal.emit(self.item, icon)
#
# MAIN WINDOW
#
class Main(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
# ...
# Connect signals
signaller.my_signal.connect(self.my_handler)
@QtCore.Slot(QListWidgetItem, QIcon)
def my_handler(self, item, icon):
item.setIcon(icon)
def do_something(self, address):
# ...
# Start new thread
my_thread = MyThread(newItem)
my_thread.start()
# ...
有沒有更簡單的方法?創建信號,處理程序並連接它們需要幾行代碼。
爲什麼不使用'QThread'? – Avaris
如果使用'QThread'更容易,我會考慮使用一個。問題是現有的代碼通常傾向於使用'threading.Thread'。 – Petter
這是更好的,因爲'QThread'支持信號。你不需要你的'Signaller'類。但基本上,你的方式就是這樣。您需要信號和插槽來在線程和GUI之間進行通信。 – Avaris