gpt4 book ai didi

python - 不使用 pygobject 通知操作调用回调

转载 作者:太空宇宙 更新时间:2023-11-04 01:09:35 24 4
gpt4 key购买 nike

我想用 pygobject 在通知中显示一个按钮。单击此按钮时应调用回调,但实际上没有,我不明白为什么。

这是我的代码:

from gi.repository import Notify, Gtk

class Test:
def __init__(self):
Notify.init('example')
self.notif()

Gtk.main()

def notif(self):
notif = Notify.Notification.new('Title', 'something','dialog-information')

notif.add_action('display', 'Button', self.callback, None)
notif.show()

def callback(self, notif_object, action_name, users_data):
print("Work!")
Gtk.main_quit()

Test()

当我点击按钮“Button”时,没有任何反应,也没有调用回调。有什么问题?

经过一些尝试,我发现当我将 Gtk.main() 紧跟在 notif.show() 之后时,回调会起作用。但是我不能使用这个解决方案,因为它意味着我以后不能显示其他通知。

最佳答案

在调用回调之前,您需要保留对通知对象的引用:

from gi.repository import Gtk, Notify


class Window(Gtk.Window):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
Notify.init('Test')
self.notification = None

self.set_border_width(5)

self.button = Gtk.Button('Test')

self.box = Gtk.Box()
self.box.pack_start(self.button, True, True, 0)
self.add(self.box)

self.button.connect('clicked', self.on_button)
self.connect('delete-event', Gtk.main_quit)
self.show_all()

def on_button(self, button):
if self.notification:
self.notification.close()
self.notification = Notify.Notification.new('Test')
self.notification.add_action('clicked', 'Action', self.callback)
self.notification.show()

def callback(self, notification, action_name):
print(action_name)

win = Window()
Gtk.main()

如果您需要显示更多相同的通知,您需要一个通知对象列表。

对于无窗口示例,请参阅此 answer .

关于python - 不使用 pygobject 通知操作调用回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28461452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com