Взаимодействие с gtk.container во время выполнения gtk.main()?

#python #gtk #pygtk

#python #gtk #pygtk

Вопрос:

В данный момент экспериментирую со значком монитора заряда батареи в Python, используя pygtk и egg.trayicon создавая значок для отображения значка батареи / всплывающей подсказки.

Кажется, я могу добавить значок и текст всплывающей подсказки, но когда это достигнет gtk.main() стадии, мне нужен способ изменить их, чтобы затем он мог отображать обновленные значения.

Я пробовал gobject.idle_add() и gobject.timeout_add() без особой удачи, не уверен, куда идти от этого.

У кого-нибудь есть какие-нибудь идеи?

РЕДАКТИРОВАТЬ: Возможно, не самый ясный из вопросов.

Мне нужно выполнить цикл, извлекая информацию из acpi во время выполнения и применяя ее к виджетам внутри контейнера gtk.

ПРАВКА 2: Хорошо, теперь все правильно отключено. Проблема заключалась в том, что я ничего не возвращал внутри моего обратного вызова. Я только что выдал ему «return 123», и теперь он радостно пыхтит в моем системном трее, уведомляя меня о проценте заряда батареи 🙂

Ответ №1:

Этот пример работает для меня:

 # -*- Mode: Python -*-
# vi:si:et:sw=4:sts=4:ts=4

import gobject
import gtk
from egg import trayicon

label = gtk.Label("Over here")

def callback(widget, ev):
    label.set_text("You found me")

def timeout():
    label.set_text("What are you waiting for?")

tray = trayicon.TrayIcon("TrayIcon")
box = gtk.EventBox()
box.add(label)
tray.add(box)
tray.show_all()

box.connect("button-press-event", callback)

gobject.timeout_add(3000L, timeout)

gtk.main()
  

Не видя вашего кода, трудно сказать, что не работает.

Комментарии:

1. Я пытаюсь сделать это прямо сейчас, но, как и раньше, функция timeout () выполняется только один раз. Мне нужно выполнять цикл, извлекать и применять информацию по мере ее выполнения

2. тайм-ауты и простои удаляются, если они возвращают false .

3. В какой ситуации они возвращают false?