PyGObject 进度栏在通知.通知



我在Python 3中使用PyGObject,我想使用带有进度条的Notify.Notification显示通知。进度条不需要自行/异步更新或任何东西 - 它可以(并且应该)是静态的,仅在我手动设置新值然后告诉通知显示时才更新。我想要的是诸如卷通知之类的东西,在您更改新卷时显示新卷。

我一直找不到任何方法来执行此类搜索文档,是否可以使用 PyGObject?或者,是否有另一个允许这种行为的 Python 3 库?

我目前显示的通知是基于文本的进度类似于以下内容:

import gi
gi.require_version('Notify', '0.7')
from gi.repository import Notify
def __init___(self):
...
Notify.init("Progress")
self.notification = Notify.Notification(summary='Progress', body='0%')
self.notification.set_image_from_pixbuf(notification_image)
...
def on_progress_update(self, progress):
...
self.notification.update('Progress', str(progress) + '%', None)
self.notification.show()
...

因此,经过更多的搜索,我在 xfce 论坛上找到了这个线程,讨论使用 send-notify 来获取 xfce4 通知的"仪表",并且能够弄清楚如何使用Notify.Notification.set_hint()。因此,如果您希望通知显示进度条/状态栏/仪表,则可以使用以下方法:

import gi
gi.require_version('Notify', '0.7')
from gi.repository import GLib, Notify
Notify.init("Name")
notification = Notify.Notification()
notification.set_hint('value', GLib.Variant.new_int32(volume))

注意事项:

  • 如果使用此方法,设置摘要和正文(如原始问题所示)似乎毫无意义,因为两者都不显示,仅显示进度条。图标/图像仍然可以显示在进度条旁边,例如带有notification.set_image_from_pixbuf()
  • GLib.Variant 类型可以是int32int64double,也可能是其他大于int32的数字类型,但不能byteint16,任何uint类型,如uint32,或(我假设)任何非数字类型。只要用int32作为我能说的法。
  • 当我在其他步骤中使用Name等通用名称时,set_hint的值必须用小写 v'value'

另外值得注意的是,我不确定这是否是一种全局方法,或者它是否仅适用于 xfce4-notifyd,我只使用 xfce4-notifyd,所以现在我不担心,但如果我研究这个我会尽量记住更新我的答案。或者,如果其他人知道这个问题的答案,请告诉我。

Tomha的解决方案有效,只是想指出一种复制任何通知的通用方法。

通过运行dbus-monitor并更改音量,应该沿着行的某个位置打印这样的东西,因为所有通知都是通过 dbus 创建的:

method call time=1598625454.708735 sender=:1.75 -> destination=:1.81 serial=23739 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=Notify
string "Xfce volume control"
uint32 0
string "audio-volume-medium-symbolic"
string "Volume 46%"
string ""
array [
]
array [
dict entry(
string "transient"
variant             boolean true
)
dict entry(
string "x-canonical-private-synchronous"
variant             string ""
)
dict entry(
string "value"
variant             int32 46
)
]
int32 2000

下面是生成进度条的提示名称和值:

dict entry(
string "value"
variant             int32 46
)

相关内容

  • 没有找到相关文章

最新更新