Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Notify.Notification中的PyGObject进度条_Python_Python 3.x_Notifications_Gtk3_Pygobject - Fatal编程技术网

Python Notify.Notification中的PyGObject进度条

Python Notify.Notification中的PyGObject进度条,python,python-3.x,notifications,gtk3,pygobject,Python,Python 3.x,Notifications,Gtk3,Pygobject,我将PyGObject与Python3一起使用,我想使用一个Notify.notification来显示一个通知,其中有一个进度条。进度条不需要自己/异步地更新,也不需要任何东西——它可以(也应该)是静态的,只有在我手动设置一个新值然后告诉通知显示时才会更新。我想要的是一个卷通知,在您更改时显示新卷 我一直无法找到任何方法来搜索文档,例如,是否可以使用PyGObject?或者,是否有另一个Python 3库允许这种行为 我目前正在显示基于文本的进度通知,如下所示: import gi gi.re

我将PyGObject与Python3一起使用,我想使用一个
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 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))
注意事项:

  • 如原问题所示,如果使用此方法,设置摘要和正文似乎毫无意义,因为它们都不显示,只显示进度条。图标/图像仍然可以显示在进度条的旁边,例如带有
    通知。从\u pixbuf()设置\u image\u
  • GLib.Variant类型可以是
    int32
    int64
    double
    ,也可能是比
    int32
    大的数字类型,但不能是
    byte
    int16
    ,任何
    uint
    类型,如
    uint32
    ,或者(我假设)任何非数字类型。只要使用
    int32
    ,我就知道了
  • 当我在其他步骤中使用像
    Name
    这样的通用名称时,
    set\u 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
以下是生成progressbar的提示名称和值:

dict entry(
   string "value"
   variant             int32 46
)