python-3.x - python 直接从 Qthread PyQt 5更改 GUI

  显示原文与译文双语对照的内容

你好,我已经发送到我的线程工作者链接到GUI和更新GUI信息直接从 QThread 。 比如这里:


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的新手。 Thx,如果我的解决方案坏了请帮我修复。

时间: 原作者:

无法从辅助线程更新 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")



GUI:


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)


. . .



原作者:
...