Notify.Notification中的PyGObject进度条

时间:2017-01-27 06:37:51

标签: python python-3.x notifications gtk3 pygobject

我在Python 3中使用PyGObject,我希望使用Notify.Notification显示通知,其中包含进度条。进度条不需要自己/异步或任何更新 - 它可以(并且应该)是静态的,只有在我手动设置新值然后告诉显示通知时才更新。我在更改后显示新卷的音量通知之类的内容。

我一直无法找到任何方法来执行此搜索文档,例如this,这可能使用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()
    ...

2 个答案:

答案 0 :(得分:1)

所以经过更多的搜索后,我在xfce论坛上发现this线程,讨论使用send-notify来获取xfce4-notifyd“gauges”,并且能够弄清楚如何使用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的值必须为'value',且小写为v。

另外值得注意的是我不确定这是否是一种非传统的方法,或者它是否仅适用于xfce4-notifyd,我只使用xfce4-notifyd所以现在我并不担心,但如果我调查这个我会试着记住更新我的答案。或者,如果其他人知道答案,请告诉我。

答案 1 :(得分:0)

The solution by 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
)