Skip to main content
 首页 » 编程设计

python之Notify.Notification 中的 PyGObject 进度条

2024年10月01日1傻小

我在 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() 
    ... 

请您参考如下方法:

经过更多的搜索,我找到了 this xfce 论坛上的线程讨论了使用 send-notify 来获取 xfce4-notifyd“仪表”,并且能够弄清楚如何使用 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,所以现在我不担心,但如果我调查这个我会尽量记得更新我的答案。或者,如果其他人知道此问题的答案,请告诉我。