在我的应用程序中,我使用一个函数来显示带有超时的 GtkInfoBars(如所述https://stackoverflow.com/a/1309257/406281 https://stackoverflow.com/a/1309257/406281)感谢 glib.timeout_add_seconds()。
我知道 glib.timeout_add_seconds() 应该设置一个定期调用的函数,直到该函数返回 False 。
我没有这样做,但一切都按预期进行。这非常简单。这是我的代码:
def infobar(self, message, msgtype=gtk.MESSAGE_INFO, timeout=5):
bar = gtk.InfoBar()
bar.set_message_type(msgtype)
bar.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
bar.connect("response", lambda *args: bar.hide())
self.vb2.pack_end(bar, False, False)
label = gtk.Label()
label.set_markup(message)
content = bar.get_content_area()
content.add(label)
label.show()
bar.show()
if timeout:
glib.timeout_add_seconds(timeout, bar.hide)
所以。提问时间。看看我在最后一行做了什么。简单来说,这样可以吗?第二次调用 bar.hide() 失败后超时会自行破坏吗?或者我是否累积了额外的绝育超时,[技术上]每 5 秒唤醒一次,耗尽资源?
作为附录:
如果,正如我怀疑的那样,这很糟糕,并且我确实需要返回 False 来破坏超时,那么我需要一些帮助 - 我无法弄清楚如何使用代码来满足这些条件:我需要同时允许多个 InfoBar,每个 InfoBar 仍保持连接到自己的计时器和按钮响应信号(如现在的代码所示)OR我需要每个新的 InfoBar 来替换任何以前的 InfoBar(我无法弄清楚如何在不继承前一个 InfoBar 的计时器的情况下执行此操作 - 它会变得混乱)。
谢谢阅读!