PySide&Python:如何通过Signal/Slot发送字典?

2024-09-30 22:23:34 发布

您现在位置:Python中文网/ 问答频道 /正文

平台:Centos 6和Python 2.6.6

在看了所有关于这样做的例子和问题之后,我的一生都无法让它在我的系统上运行。大多数答案似乎都是关于使用PyQt而不是PySide,这对我来说不是一个选择:我必须使用公司给我的东西。在

下面是我的主GUI应用程序的代码片段:

from PySide import QtCore, QtGui
class MyGui( QtGui.QMainWindow ):
  @QtCore.Slot( dict )
  def MySlot( self, data ):
     CodeThatUsesData()

以及发出信号的模块:

^{pr2}$

当然,我有连接信号和插槽的代码:

listener.MySignal.connect( gui.MySlot )

当调用DoSomeWork()时(特别是在emit()行)我得到的错误是:

QObject::connect: Cannot queue arguments of type 'object'
(Make sure 'object is registered using qRegisterMetaType().)

据我所知,这应该是完全可行的。更令人沮丧的是,我发现PySide文档暗示了qRegisterMetaType的使用,但是我不知道从哪里调用它。它不在QtCore或QtGui中,也不是独立的,也不是QMainWindow、QThread或QObject的成员。在

那么,如何将“object”注册为通过Signal/Slot范例的有效类型呢?我甚至尝试过将字典包装在一个QObject类中,这样可以消除注册错误,但Slot操作从未被调用,因此我不知道数据的实际去向。在

我觉得解决办法是打我耳光,但我看不到“缺少分号”。我已经准备好使用这个信号来向GUI指示共享队列中有一些东西需要它完成——这是一个不太优雅的解决方案。在

为了完整起见,以下是我读过但对我没有帮助的类似帖子:

stackoverflow: sending-custom-pyqt-signals

stackoverflow: Qt: Not registered qRegisterMetaType()

stackoverflow: QObject (QPlainTextEdit) & Multithreading issues

stackoverflow: QObject::connect: Cannot queue arguments of type 'object' in PySide

TIA stackoverflow社区!在


Tags: 代码object信号connect错误guistackoverflowpyside
1条回答
网友
1楼 · 发布于 2024-09-30 22:23:34

根据文档,以下是该方法的位置。正如评论中提到的,您应该将PySide升级到最新版本,因为您遇到的问题在当前版本中不可重现。在

PySide.QtCore.QSettings.qRegisterMetaType

相关问题 更多 >