【发布时间】:2015-10-27 12:25:49
【问题描述】:
我正在努力将旧的 Java GUI 修改为 python,并决定尝试在 PyQt4 中创建和实现它。
原始程序连接到外部服务器,并使用服务器设置的数据来更新各种图形。这些图形是从主 GUI 中打开的,并且彼此独立地操作和更新。
我设法设置了一些类似的东西来打开一个主 GUI 窗口,并连接到外部服务器。当我从服务器获取新数据时,我遇到的问题是更新一个数字(我想我会从一个数字开始,然后从那里增加)。
由于我对通过 PyQt 在 GUI 中设置客户端到服务器连接或线程缺乏理解或发现 python 文档,我已经实施了各种解决方法。我连接到服务器并通过扭曲的客户端读取数据。此客户端在从 python 线程模块实现的单独线程上运行。这至少从我能说的情况来看是有效的。
我可以从主窗口使用新更新的数据打开图形,但我似乎无法从扭曲的客户端线程更新它们。我收到如下错误:
QObject::setParent: 无法设置父级,新父级在不同的线程中 要么 exceptions.RuntimeError: 主线程不在主循环中
根据我的研究,我了解到对于 PyQt 窗口必须从主线程更新。我不知道该怎么做。我当前的实现有主线程承载主初始窗口,我不确定如何在收到新数据时触发它来更新子窗口。
是否有任何想法或链接可以让我了解如何实现这一点,或者有什么更好的框架或 GUI 设置?
编辑:我的代码的当前设置创建了设置客户端连接并处理服务器消息的线程,当前设置为守护线程。因为,除非与服务器的连接丢失,否则它没有退出条件。 Twisted 客户端不允许用户返回数据,但由于我需要更新数据的数据存储在 self 变量中,因此它们在每个新数据包期间都会更新。 QTread 的所有示例似乎都有一个退出条件,如果没有一个,我将如何让它工作?或者我如何设置我的客户端有一个退出语句,然后重新连接以获取下一条消息?
【问题讨论】:
-
检查我对这个类似问题的回答:stackoverflow.com/a/24821300/2319400
-
这些示例很有帮助,但从我目前所见,我无法设置线程以便它可以退出,并且您的所有示例似乎都包含一个设置要退出的线程。我将编辑我的问题并提供更多详细信息。
标签: python multithreading user-interface pyqt4