[英]Changing GUI directly from Qthread PyQt 5
嗨,我已經發送給我的線程工人GUI鏈接,並直接從QThread更新GUI信息。 像這兒:
class Worker(QThread):
def __init__(self, ui):
QThread.__init__(self)
self.running = False
self.ui = ui
def run(self):
self.running = True
while self.running:
info = self.check_info()
rows = len(info)
self.ui.tableWidget.setRowCount(rows)
self.ui.tableWidget.setColumnCount(6)
...
在主QMainWindow
我只需添加
def __init__(self, parent=None):
.......
self.myworker = Worker(self.ui)
.....
這樣的解決方案在PyQt5中非常不好嗎? 我是PyQt的新手。 謝謝。 如果我的解決方案不好,請幫助我修復它。
您不能也不能從輔助線程更新GUI,必須通過信號和插槽來完成:
為此,我們將通過pyqtSignal()
類創建一個信號,並將指示參數的類型,然后將其連接到所需的插槽,如下所示:
線:
class Worker(QThread):
list_of_dict_signals = pyqtSignal(list)
str_signal = pyqtSignal(str)
def __init__(self, parent=None):
QThread.__init__(self, parent)
self.running = False
def run(self):
self.running = True
while self.running:
info = self.check_info()
self.list_of_dict_signals.emit(info)
self.str_signal.emit("Requesting info")
界面:
def __init__(self, parent=None):
.......
self.myworker = Worker(self)
self.myworker.list_of_dict_signals.connect(self.onDataFromThread)
self.myworker.str_signal.connect(self.ui.statusbar.showMessage)
self.myworker.start()
def onDataFromThread(self, info):
rows = len(info)
self.ui.tableWidget.setRowCount(rows)
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.