PyQt4 中多线程 python GUI 的正确实现是什么
What is the correct implementation of a mulithreaded python GUI in PyQt4
我正在努力将旧的 Java GUI 修改为 python,并决定尝试在 PyQt4 中创建和实现它。
原程序连接外部服务器,使用服务器设置的数据更新各种数字。这些数字是从主 GUI 打开的,并且彼此独立地操作和更新。
我已经设法设置了类似的东西来打开主 GUI window,并连接到外部服务器。我遇到的问题是当我从服务器获取新数据时更新一个数字(我想我会从一个数字开始然后从那里增加)。
由于我对通过 PyQt 在 GUI 中设置客户端到服务器连接或线程的理解不足或找到 python 文档,我实施了各种解决方法。我连接到服务器并通过扭曲的客户端读取数据。此客户端 运行 在从 python 线程模块实现的单独线程上。至少据我所知,这是可行的。
我可以用来自主 window 的新更新数据打开这些数字,但我似乎无法从扭曲的客户端线程更新它们。我收到如下错误:
QObject::setParent:无法设置父级,新父级在不同的线程中
要么
exceptions.RuntimeError: 主线程不在主循环中
根据我的研究,我了解到 PyQt windows 必须从主线程更新。我不知道该怎么做。我当前的实现有主线程携带主初始window,我不确定如何触发它来更新子 windows 当收到新数据时。
是否有任何想法或链接可以让我了解如何实现这个或者什么可以是更好的 GUI 框架或设置?
编辑: 我的代码的当前设置创建了设置客户端连接和处理服务器消息的线程,当前设置为守护线程。因为,除非与服务器的连接丢失,否则它没有退出条件。 Twisted 客户端不允许用户 return 数据,但由于我需要更新图形的数据存储在 self 变量中,因此它们会在每个新数据包期间更新。 QTread 的所有示例似乎都有一个退出条件,如果没有退出条件,我将如何让它工作?或者我如何设置我的客户端以具有退出语句然后重新连接以获取下一条消息?
使用 QThread and make your own worker class as suggested in the documentation 而不是 python 个线程。 (WorkerThread 的第二个示例)。
我正在努力将旧的 Java GUI 修改为 python,并决定尝试在 PyQt4 中创建和实现它。
原程序连接外部服务器,使用服务器设置的数据更新各种数字。这些数字是从主 GUI 打开的,并且彼此独立地操作和更新。
我已经设法设置了类似的东西来打开主 GUI window,并连接到外部服务器。我遇到的问题是当我从服务器获取新数据时更新一个数字(我想我会从一个数字开始然后从那里增加)。
由于我对通过 PyQt 在 GUI 中设置客户端到服务器连接或线程的理解不足或找到 python 文档,我实施了各种解决方法。我连接到服务器并通过扭曲的客户端读取数据。此客户端 运行 在从 python 线程模块实现的单独线程上。至少据我所知,这是可行的。
我可以用来自主 window 的新更新数据打开这些数字,但我似乎无法从扭曲的客户端线程更新它们。我收到如下错误:
QObject::setParent:无法设置父级,新父级在不同的线程中 要么 exceptions.RuntimeError: 主线程不在主循环中
根据我的研究,我了解到 PyQt windows 必须从主线程更新。我不知道该怎么做。我当前的实现有主线程携带主初始window,我不确定如何触发它来更新子 windows 当收到新数据时。
是否有任何想法或链接可以让我了解如何实现这个或者什么可以是更好的 GUI 框架或设置?
编辑: 我的代码的当前设置创建了设置客户端连接和处理服务器消息的线程,当前设置为守护线程。因为,除非与服务器的连接丢失,否则它没有退出条件。 Twisted 客户端不允许用户 return 数据,但由于我需要更新图形的数据存储在 self 变量中,因此它们会在每个新数据包期间更新。 QTread 的所有示例似乎都有一个退出条件,如果没有退出条件,我将如何让它工作?或者我如何设置我的客户端以具有退出语句然后重新连接以获取下一条消息?
使用 QThread and make your own worker class as suggested in the documentation 而不是 python 个线程。 (WorkerThread 的第二个示例)。