PyQt6 - 未收到 DBus 信号?

问题描述 投票:0回答:1

我正在尝试创建一个系统来通过 mpris 跟踪当前正在播放的媒体。改编自这个问题的PyQt6答案,我尝试了以下代码:

from PyQt6 import QtCore, QtWidgets, QtDBus
import sys

class MainWindow(QtWidgets.QMainWindow):
    def __init__ (self):
        super().__init__()
        service = 'org.mpris.MediaPlayer2.vlc'
        path = '/org/mpris/MediaPlayer2'
        iface = 'org.mpris.MediaPlayer2'
        conn = QtDBus.QDBusConnection.systemBus()
        conn.registerObject('/', self)
        conn.connect(service, path, iface, 'PropertiesChanged', self.nochangeslot)

    @QtCore.pyqtSlot(QtDBus.QDBusMessage)
    def nochangeslot(self, msg):
        print(f'signature: {msg.signature()!r}, '
              f'arguments: {msg.arguments()!r}')

app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()

这应该连接任何 VLC Media Player 实例(替换为您选择的服务或以编程方式查找它),将 PropertiesChanged 发送到打印消息的简单函数。

在执行更改当前歌曲等操作时,应发出PropertiesChanged。但是,这样做时不会打印任何内容。我也尝试将

iface
更改为
'org.mrpis.MediaPlayer2.Player'
,但并没有改善问题。

知道为什么这不起作用吗?

python pyqt dbus pyqt6
1个回答
0
投票

有两个问题:

  1. 您在系统总线上找不到 MPRIS 播放器或任何其他应用程序。它们都连接到用户的个人会话总线。

  2. 由于属性是通用 D-Bus 概念,因此它们的信号和方法始终作为通用

    org.freedesktop.DBus.Properties
    接口的一部分实现,而不是作为对象自定义接口的一部分。

    (每个属性所属的“真实”接口实际上作为这些信号和方法的参数提供。)

© www.soinside.com 2019 - 2024. All rights reserved.