В моем приложении я использую функцию для отображения GtkInfoBars с тайм-аутом (как описано 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, чтобы уничтожить тайм-ауты, мне нужна помощь - я не могу понять, как поиграться с кодом, чтобы удовлетворить следующие условия: мне нужно разрешить несколько информационных баров вt в то же время, когда каждый из них остается подключенным к своему собственному таймеру и сигналу ответа кнопки (как сейчас код) ИЛИ Мне нужен каждый новый информационный бар, чтобы заменить любой предыдущий (я не могу понять,как это сделать, не унаследовав таймер от предыдущего инфо-бара - он становится грязным).
Спасибо за чтение!