我在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()
...
答案 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()
int32
,int64
,double
,也可能是数字类型大于int32
的其他类型,但不是byte
或int16
,任何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
)