У меня проблема с TreeView от GTK с ListStore. Записи обновляются, но когда-то только когда я его наводил. Большая проблема - это новые записи. Это похоже на то, что она перестает отображать новые, если я не прокручиваю все это время - это странно.Python GTK3 - TreeView не обновляется должным образом
Я использую Glade. Мой код (немного упрощенно)
class UI(SampleUI):
gladefile = 'ui.glade'
iterdict = {}
def __init__(self, module):
super().__init__(module)
def start(self):
self.fetch_widgets()
self.connect_events()
self.window.show()
def fetch_widgets(self):
self.window = self.builder.get_object('window')
self.liststore = self.builder.get_object('store')
def connect_events(self):
handlers = {
"on_window_close" : Gtk.main_quit,
"on_start_working": self.start_working,
"on_stop_working": self.stop_working
}
self.builder.connect_signals(handlers)
self.module.url_pending_action = self.url_pending
self.module.url_succeed_action = self.url_update
def start_working(self, button):
self.module.start()
def stop_stop(self, button):
self.module.stop()
def url_pending(self, data):
self.iterdict[data['url']] = self.liststore.append([0, data['url'], 0, '', data['text']])
def url_update(self, data):
_iter = self.iterdict[data['url']]
self.liststore[_iter][1] = data['some_field1']
self.liststore[_iter][2] = data['some_field2']
Методы self.url_pending и self.url_update называются нитями (не более 30, работающих одновременно), созданных в self.module
Я проверил и новые записи правильно добавлены в ListStore - я могу читать данные из него. Окно отлично работает, но внизу нет новых предметов.
Идеи?
Вместо 'GObject вы должны использовать [' Gdk.threads_add_idle'] (http://lazka.github.io/pgi-docs/index.html#Gdk-3.0/functions.html#Gdk.threads_add_idle). timeout_add', но в остальном это правильная идея. – ptomato