Notify.Notification 中的 PyGObject 进度条
PyGObject Progress Bar in Notify.Notification
我正在使用带有 Python 3 的 PyGObject,我想使用其中有一个进度条的 Notify.Notification
来显示通知。进度条不需要更新它的 own/asynchronously 或任何东西——它可以(而且应该)是静态的,只有当我手动设置一个新值然后告诉通知显示时才会更新。我正在寻找类似音量通知之类的东西,它会在您更改音量时显示新音量。
我一直无法找到任何方法来执行此搜索文档,例如 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()
...
所以经过更多搜索后,我在 xfce 论坛上找到 this 讨论使用 send-notify 获取 xfce4-notifyd "gauges" 的帖子,并且能够弄清楚如何使用 Notify.Notification.set_hint()
。因此,如果您希望通知显示进度 bar/status bar/gauge,您可以使用以下内容:
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))
注意事项:
- 设置摘要和正文,如原始问题所示,如果使用此方法似乎毫无意义,因为它们都没有显示,只有进度条。 icon/image 仍然可以显示在进度条旁边,例如
notification.set_image_from_pixbuf()
- GLib.Variant 类型可以是
int32
、int64
、double
,也可能是其他大于 int32
的数字类型,但不能是 byte
或 int16
,任何 uint
类型,例如 uint32
,或(我假设)任何 non-numeric 类型。据我所知,请使用 int32
。
- 虽然我在其他步骤中使用像
Name
这样的通用名称,但 set_hint
的值必须是 'value'
和小写 v.
另外值得注意的是,我不确定这是否是一种通用方法,或者它是否只适用于 xfce4-notifyd,我只使用 xfce4-notifyd,所以现在我不担心,但如果我调查这个我会尽量记得更新我的答案。或者,如果其他人知道这个问题的答案,请告诉我。
有效,只是想指出复制任何通知的一般方法。
通过 运行 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
)
我正在使用带有 Python 3 的 PyGObject,我想使用其中有一个进度条的 Notify.Notification
来显示通知。进度条不需要更新它的 own/asynchronously 或任何东西——它可以(而且应该)是静态的,只有当我手动设置一个新值然后告诉通知显示时才会更新。我正在寻找类似音量通知之类的东西,它会在您更改音量时显示新音量。
我一直无法找到任何方法来执行此搜索文档,例如 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()
...
所以经过更多搜索后,我在 xfce 论坛上找到 this 讨论使用 send-notify 获取 xfce4-notifyd "gauges" 的帖子,并且能够弄清楚如何使用 Notify.Notification.set_hint()
。因此,如果您希望通知显示进度 bar/status bar/gauge,您可以使用以下内容:
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))
注意事项:
- 设置摘要和正文,如原始问题所示,如果使用此方法似乎毫无意义,因为它们都没有显示,只有进度条。 icon/image 仍然可以显示在进度条旁边,例如
notification.set_image_from_pixbuf()
- GLib.Variant 类型可以是
int32
、int64
、double
,也可能是其他大于int32
的数字类型,但不能是byte
或int16
,任何uint
类型,例如uint32
,或(我假设)任何 non-numeric 类型。据我所知,请使用int32
。 - 虽然我在其他步骤中使用像
Name
这样的通用名称,但set_hint
的值必须是'value'
和小写 v.
另外值得注意的是,我不确定这是否是一种通用方法,或者它是否只适用于 xfce4-notifyd,我只使用 xfce4-notifyd,所以现在我不担心,但如果我调查这个我会尽量记得更新我的答案。或者,如果其他人知道这个问题的答案,请告诉我。
通过 运行 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
)