Alternative zu update_idletasks?

Fragen zu Tkinter.
Antworten
hwm
User
Beiträge: 36
Registriert: Mittwoch 20. April 2005, 23:33

Donnerstag 21. April 2005, 00:00

Hallo,

ich habe folgendes Problem: Ich habe mir in Python und Tkinter ein Bildverwaltungsprogramm erstellt. Das sieht in etwa so aus: ich kann verschiedene Suchbegriffe eingeben und erhalte dann eine Anzeige der Bilder in Form von Thumbnails in einem Canvas. Da ich im Moment ca. 20.000 Bilder verwalte, kann es vorkommen, dass eine Suche mit vielen Treffern schon mal etwas dauert (Zugriff auf Datenbank, zusammensuchen der Thumbnails etc.). Deshalb habe ich in einem zweiten "Minicanvas" einen Fortschrittbalken implementiert, der auch hervorragend funktioniert. Aber: diese Funktion verlängert die Bearbeitung einer Suchanfrage um den Faktor 2.5. Beispiel: Anzahl Treffer ca. 500 mit Fortschrittsbalken: 45 sek. Ohne Fortschrittsbalken: 19 sek. Das kommt daher, weil ich den Fortschrittbalken (den ich sowieso bald ausbauen muss, wenn Microsoft mit seinem Patentantrag darauf Erfolg hat :wink: ) mit update_idletasks aktualisiere. Das führt dazu, dass auch der "Haupt-Canvas" mit den ganzen Thumbnails sich während der Suchanfrage aktualisiert und Tkinter ständig die Positionen etc. neu berechnen muss. Daher die Frage, ob es eine andere Möglichkeit gibt, in der GUI nur einen Teilbereich (in diesem Fall nur den "Minicanvas") zu aktualisieren. update_idletasks macht lt. Dokumentation folgendes: "Call pending idle tasks" und führt daher zu meinem Problem. Vielen Dank schon mal für Antworten und Anregungen.

Gruß
Hans
hwm
User
Beiträge: 36
Registriert: Mittwoch 20. April 2005, 23:33

Mittwoch 8. Juni 2005, 18:04

Vielen Dank erst mal für die Idee, hab's mal mitm Thread probiert (neuer Toplevel, hierin der Canvas mit dem Fortschrittsbalken, update_idletasks dann in einem Thread). Bringt aber nichts, dasselbe Resultat. Hat noch jemand eine Idee?
jAN
User
Beiträge: 170
Registriert: Samstag 4. Juni 2005, 18:51
Wohnort: Großmehlra (in Thüringen)
Kontaktdaten:

Mittwoch 8. Juni 2005, 19:12

Antworten