在PyQt4中,多读python GUI的正确实现是什么?



我正在修改一个旧的Java GUI到python,并决定尝试在PyQt4中创建和实现它。

原始程序连接外部服务器,使用服务器设置的数据更新各种数字。这些图形从一个主GUI打开,并且彼此独立地操作和更新。

我已经设法设置了一些类似的东西,打开一个主GUI窗口,并连接到外部服务器。当我从服务器获得新数据时,我遇到的问题是更新一个数字(我想我会从一个数字开始,然后从那里增加)。

由于我缺乏理解,或python文档发现,通过PyQt在GUI中设置客户端到服务器连接或线程,我已经实现了各种工作。我连接到服务器并通过扭曲的客户端读取数据。该客户端运行在由python线程模块实现的单独线程上。至少在我看来,这是可行的。

我可以从主窗口用新更新的数据打开数字,但我似乎无法从扭曲的客户端线程更新它们。我得到这样的错误:

QObject::setParent:不能设置父级,新的父级在不同的线程中或例外。RuntimeError:主线程不在主循环

根据我的研究,我了解PyQt窗口必须从主线程更新。我不知道该怎么做。我目前的实现有主线程承载主初始窗口,我不确定如何触发它来更新子窗口时,收到新的数据。

任何想法或链接,可能会给我一个想法如何实现这个或什么可能是一个更好的框架或设置的GUI?

EDIT:我的代码的当前设置创建了设置客户端连接和处理服务器消息的线程,当前设置为守护线程。因此,除非与服务器的连接丢失,否则它没有退出条件。Twisted客户机不允许用户返回数据,但由于我需要更新图形的数据存储在self变量中,因此它们在每个新数据包期间都会更新。QTread的所有例子似乎都有退出条件,如果没有退出条件,我怎么能让它工作呢?或者如何设置客户端,使其具有退出语句,然后重新连接以获得下一条消息?

不使用python线程,而是使用QThread并按照文档中的建议创建自己的worker类。(第二个使用WorkerThread的例子)

最新更新