直接从 Qthread PyQt 5 更改 GUI
Changing GUI directly from Qthread PyQt 5
您好,我已将我的 Thread worker link 发送到 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,你必须通过信号和插槽来完成:
为此,我们将通过 class 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)
...
您好,我已将我的 Thread worker link 发送到 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,你必须通过信号和插槽来完成:
为此,我们将通过 class 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)
...