我正在通过制作一个简单的 Twitter 客户端来练习 PyQt 和 (Q) 线程。我有两个 Qthread。
主/GUI 线程。
Twitter 获取线程 - 每 X 分钟从 Twitter 获取数据。
因此,每隔 X 分钟,我的 Twitter 线程就会下载一组新的状态更新(Python 列表)。我想将此列表交给 Main/GUI 线程,以便它可以使用这些状态更新窗口。
我假设我应该使用信号/槽系统将“状态”Python 列表从 Twitter 线程传输到 Main/GUI 线程。所以,我的问题是双重的:
如何从 Twitter 线程发送状态?
如何在 Main/GUI 线程中接收它们?
据我所知,PyQt 默认只能通过信号/插槽发送 PyQt 对象。我想我应该以某种方式注册一个自定义信号,然后我可以发送它,但是我发现的关于这个的文档对于像我这样的新手来说非常不清楚。我订购了一本 PyQt 书,但它不会再过一周到货,我不想等到那时。:-)
我在 Ubuntu 上使用 PyQt 4.6-1
更新:
这是不起作用的代码的一个例子。首先,我尝试将信号(“newStatuses”,我刚刚编的一个名称)“连接”到 Main/GUI 线程中的函数 self.update_tweet_list:
QtCore.QObject.connect(self.twit_in,
QtCore.SIGNAL("newStatuses (statuses)"),
self.update_tweet_list)
然后,在 Twitter 线程中,我这样做:
self.emit(SIGNAL("newStatuses (statuses)"), statuses)
调用此行时,我收到以下消息:
QObject::connect: Cannot queue arguments of type 'statuses'
(Make sure 'statuses' is registered using qRegisterMetaType().)
我搜索了 qRegisterMetaType() ,但没有找到任何我能理解的与 Python 相关的内容。