Używam kolejki do wymiany wiadomości między wątkiem tła a aplikacją TK GUI. Obecnie odbywa się to przez wywoływanie metody zapytania co jakiś czas.Tkinter: Poczekaj na element w kolejce
def read_queue(self):
try:
self.process(self.queue.get(False)) # non-blocking
except Queue.Empty:
pass
finally:
self.after(UPDATE_TIME, self.read_queue)
Problem z tego podejścia jest to, że jeśli UPDATE_TIME
jest zbyt duża, aplikacja będzie przetwarzać nowe przedmioty wolniejsze niż to możliwe. Jeśli jest zbyt mały, TK spędza większość czasu na sprawdzaniu kolejki, chociaż w międzyczasie może robić inne rzeczy.
Czy istnieje sposób automatycznego wyzwalania metody read_queue
po otrzymaniu nowego elementu w kolejce? (Mogę z pewnością nazwać metodę na Tk gdy wątek tła wypełnia kolejkę, ale obawiam się, że to daje mi pewne problemy współbieżności - dlatego używam kolejki po wszystko.)
Najwyraźniej możesz użyć event_generate z wątku tła, aby wystrzelić wirtualne wydarzenie w twoim GUI. Może to może być wykorzystane jako rodzaj powiadomienia o stanie twojej kolejki. http://groups.google.com/group/comp.lang.python/browse_thread/thread/3476fd30bec12367/853bb6f6dd216960?lnk=gst&q=brunel+%2Bevent_generate#853bb6f6dd216960 –
Wydaje się działać. Możesz dodać ją jako prawdziwą odpowiedź. – Debilski