PyQt5 - QVariant.value() 返回对象而不是 python 值 (pyqt4 .toPyObject())

Posted

技术标签:

【中文标题】PyQt5 - QVariant.value() 返回对象而不是 python 值 (pyqt4 .toPyObject())【英文标题】:PyQt5 - QVariant.value() returns object instead of python value (pyqt4 .toPyObject()) 【发布时间】:2017-12-20 10:32:59 【问题描述】:

基于 SO 示例 here 和以下输出:

from PyQt4.QtCore import QVariant
data = 'key1': 123, 'key2': 456
v    = QVariant((data,))
v.toPyObject()[0]
>>> 'key2': 456, 'key1': 123`

我尝试为 pyqt5 完成此任务,但取得了部分成功。

import sys
from PyQt5 import QtCore
from PyQt5.QtCore import QVariant

data = 'key1': 123, 'key2': 456
v    = QtCore.QVariant((data,))
v.value()[0]

print v

输出是:

<PyQt5.QtCore.QVariant object at 0x0000000006778748>

不是预期的:

'key1': 123, 'key2': 456'key2': 456, 'key1': 123

随着 QVariant 的 implementation 更改,toPyObject() 被删除并在 pyqt5 中接收到 value()。关于如何获取值而不是对象位置的任何帮助?

【问题讨论】:

在 PyQt5 中很少需要使用QVariant。普通的 Python 对象可以直接传递给任何采用QVariant 的 Qt API。空的QVariant 可以替换为None 我认为这是解决我遇到的类对象问题的特殊解决方案,但我在 socket_server 中添加了该方法,这不是一个优雅的解决方案,但现在可以完成工作)。所以我又把它拿出来了。我将在本周晚些时候发布该问题,并在此处提供参考。 (它或多或少是我链接的你的例子,它帮助我尝试了 QVarant,乍一看似乎解决了这个问题,但现在我正在根据你的程序结构树写下这个问题;还没有准备好发布它) . 【参考方案1】:

效果很好。 vQVariant 的对象。所以当你打印 v 它会显示

<PyQt5.QtCore.QVariant object at 0x0000000006778748>

对于每种类型的对象,它都有自己的方法可以调用。通过调用特定方法访问这些值。

[编辑] 工作

In [1]: import sys
   ...: from PyQt5 import QtCore
   ...: from PyQt5.QtCore import QVariant
   ...: 

In [2]: data = 'key1': 123, 'key2': 456

In [3]: v = QtCore.QVariant((data,))

In [4]: v.value()
Out[4]: ('key1': 123, 'key2': 456,)

In [5]: print v
<PyQt5.QtCore.QVariant object at 0x7f6d4e065cf8>

In [6]: print v.value()
('key2': 456, 'key1': 123,)

您打印的是 v 而不是 v.value()

【讨论】:

我知道它有效......但我需要获取该对象而不是位置的数据。都是关于方法 toPython() 已更改为 value() 并且人类无法阅读。 大声笑...我得出了相同的结论..刷新页面以更新...>竖起大拇指

以上是关于PyQt5 - QVariant.value() 返回对象而不是 python 值 (pyqt4 .toPyObject())的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5快速入门PyQt5扩展

PyQt5快速入门PyQt5简介

PyQt5快速入门

python pyqt5 自定义信号和槽

PyQt5 和 Anaconda:ModuleNotFoundError:没有名为“PyQt5”的模块

PyQt5 与 QML