首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyQt5:如何使用QtDBus获取/设置属性

PyQt5:如何使用QtDBus获取/设置属性
EN

Stack Overflow用户
提问于 2022-06-04 13:18:34
回答 1查看 151关注 0票数 2

我正试图使用SMPlayer的D总线接口"org.mpris.MediaPlayer2“与其进行通信。调用方法很好。例如:

代码语言:javascript
复制
smp = QDBusInterface(r'org.mpris.MediaPlayer2.smplayer', "/org/mpris/MediaPlayer2", "org.mpris.MediaPlayer2.Player")
smp.call("Pause")
smp.call("Seek",QDBusArgument(int(value_in_ms)*1000, QMetaType.LongLong))

我尝试了以下这两个变体,但结果是第一个变体的None (我认为应该这样做),第二个变体的No such method 'Rate' in interface 'org.mpris.MediaPlayer2.Player' at object path '/org/mpris/MediaPlayer2'(signature '')是错误的:

代码语言:javascript
复制
res = smp.property("Rate")
res = smp.call("Rate")

我验证了这些属性的存在。我可以在命令行上使用dbus-send或qdbus读取它们。知道我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-04 19:01:19

您的代码有几个问题。您使用错误的接口获取/设置属性,参数类型被错误地指定。此外,您还试图使用property(),它是继承的QObject方法,与dbus无关。

下面的交互式演示脚本展示了如何获取和设置SMPLayer Rate属性(其格式为记录在这里)。请注意,在设置属性时,必须使用QDBusVariant指定值:

代码语言:javascript
复制
from PyQt5 import QtDBus

service = 'org.mpris.MediaPlayer2.smplayer'
path = '/org/mpris/MediaPlayer2'
iface = 'org.mpris.MediaPlayer2.Player'
props = 'org.freedesktop.DBus.Properties'

smp = QtDBus.QDBusInterface(service, path, props)
msg = smp.call('Get', iface, 'Rate')
print(f'Current Rate: {msg.arguments()[0]}\n')

rate = input('Enter New Rate: ')

try:
    rate = float(rate)
except ValueError:
    print(f'ERROR: invalid rate value: {rate!r}')
else:
    msg = smp.call('Set', iface, 'Rate', QtDBus.QDBusVariant(rate))
    if msg.errorName():
        print('ERROR:', msg.errorMessage())
    else:
        msg = smp.call('Get', iface, 'Rate')
        print(f'Set New Rate: {msg.arguments()[0]}')

输出:

代码语言:javascript
复制
$ python demo.py
Current Rate: 1.0

Enter New Rate: 1.25
Set New Rate: 1.25
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72500055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档