【发布时间】:2012-01-24 06:28:07
【问题描述】:
在我的应用程序中,由于 glib.timeout_add_seconds(),我使用了一个函数来显示 GtkInfoBars 超时(如 https://stackoverflow.com/a/1309257/406281 所述)。
我知道 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 仍然保持连接到自己的计时器和按钮响应信号(现在的代码)或我需要每个新的 InfoBar 来替换任何前一个(如果不从前一个 InfoBar 继承计时器,我无法弄清楚如何做到这一点——它会变得混乱)。
感谢阅读!
【问题讨论】: