簡體   English   中英

直接從Qthread PyQt 5更改GUI

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM