当前位置: 首页 > 面试题库 >

直接从Qthread PyQt 5更改GUI

郑博
2023-03-14
问题内容

嗨,我已经发送到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创建一个信号,并将指示参数的类型,然后将其连接到所需的插槽,如下所示:

线:

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)
    ...


 类似资料:
  • 问题内容: 我有一个sql数据库,并且能够连接excel电子表格。但是,当我直接从excel更新表时,它并没有更新数据库,并且当我单击“刷新”时,所有输入的数据都不再在excel表中 是否可以在不使用任何查询的情况下从excel更新sql数据库? 问题答案: 有很多方法可以做到这一点。我建议使用类似的方法将数据从Excel推送到SQL Server。 您也可以尝试使用Where子句。

  • 在Firebase Structure Your Data一节中,有一个关于以下示例的讨论,其中聊天消息存储在聊天会话ID下。 如何监听进行任何对话?在上设置将发送包含所有会话的DataSnapshot。如果有大量的记录,那将是不可行的。查找整个快照中的哪个子级实际上被更新是一件很困难的事情。 如果我选择直接将消息存储在下,而每个消息都包含字段以检查其所属位置。通过在上创建,我可以通过为设置值侦听

  • 6.9.1.2.直接修改XML代码 另一种办法是直接修改XML代码。记住,所有用Eclipse工具所做的事情,在纯文本编辑器内也能做。要切换到XML代码视图,选择窗口底部的标签页status.xml,在Layout标签页后。这将会用标准XML编辑器打开文件。 第二种办法是直接修改XML代码。记住,凡是Eclipse工具能做的事情,纯文本编辑器也都能做。在窗口底部,Layout标签之右,就是stat

  • 问题内容: 我正在建立HTML格式的PDF清单。在列表中,我想包含一个下载链接和一个打印按钮/链接。有什么方法可以直接打开PDF的“打印”对话框,而无需用户查看PDF或打开PDF查看器? 将PDF下载到隐藏的iframe中并触发使用JavaScript进行打印,这有一些变化吗? 问题答案: 根据以下评论,它不再可在现代浏览器中使用。 该问题演示了一种可能对您有所帮助的方法:静默打印嵌入式PDF 它

  • 我试图显示一个图像的直方图,只显示一些颜色。我已经用JFreeChart和createXYLineChart实现了这一点,并通过遍历所有像素来获取所有数据。 为了加快速度,我尝试用“createhistogram”来完成它。我遵循了这个准则。 为了用新值更新图表,我使用了以下两种方法: setHistogram是一种方法,它根据激活的复选框(布尔红色、绿色和蓝色)返回HistogramDatase

  • 我正在使用现有的Java代码,其中在部署的系统上有一个现有的JDBC连接池机制,并且有一个已经存在的获取JDBC连接的设置。我想利用这一点来创建MyBatis SqlSession对象,而不创建配置、数据源和其他东西 我的代码已经创建了对象,并为其提供了所需的资源。我想利用这一点,获得对象,并从此使用MyBatis。 我不希望MyBatis管理连接池,确定使用哪个数据源等等,这可能吗?