Daten erst nach dem Programmstart 'nachladen'

Fragen zu Tkinter.
Antworten
VolkerH
User
Beiträge: 20
Registriert: Dienstag 24. September 2013, 07:16
Wohnort: 46499 Hamminkeln

Hallo zusammen,
ich möchte Euch um Eure Hilfe zu meiner folgenden Herausforderung bitten: "Wie kann ich erreichen das meine Anwendung gestartet wird, so dass das Anwendungsfenster direkt angezeigt wird und erst dann die Arbeitsdaten (in dem Fall n-Bilderdaten eines Ordners) eingelesen werden, also zeitlich aufeinander folgend?" Ich möchte ein direktes Anzeigen des Anwendungsfensters nach dem Start erreichen. Zurzeit ist es so, dass durch das Einlesen der (u. U. umfangreichen) Arbeitsdaten die Anwendung bis zum Bereitstellen der Daten nicht erscheint. Ich denke, dass ich nach dem Start separate Threads starten sollte/könnte, aber wie kann dann die Übergabe der Bilddaten an die Anwendung umgesetzt werden? Ich freue mich über jeden Hinweis.
Danke im Voraus.
Viele Grüße,
Volker
BlackJack

@VolkerH: Das hängt vom verwendeten GUI-Toolkit ab was da der beste Weg ist.
VolkerH
User
Beiträge: 20
Registriert: Dienstag 24. September 2013, 07:16
Wohnort: 46499 Hamminkeln

Hi BlackJack, danke für Deine Antwort, und sorry... ich verwende tk und Python > 3.3.0.
BlackJack

@VolkerH: Da würde ich einen Thread starten (`threading`-Modul) der die Daten lädt und auf Tk-Seite regelmässig mit der `after()`-Methode eine Funktion oder Methode aufrufen lassen die abfragt ob die Daten schon geladen sind. Dazu kann man entweder ein `threading.Event()` mit `set()` und `is_set()` verwenden, oder man verwendet eine `Queue.Queue` für den Datenaustausch zwischen den beiden Threads.
VolkerH
User
Beiträge: 20
Registriert: Dienstag 24. September 2013, 07:16
Wohnort: 46499 Hamminkeln

@BlackJack: Vielen Dank für die Tipps. Mit Threads die Sache umzusetzen habe ich irgendwie schon vermutet, dabei bin ich schon gespannt, wie ich die Threads timen bzw. mit einander (re-) agieren lassen. Queue ist für mich ein ganz neues Thema (mit Threads habe ich nur ganz wenig Erfahrungen). Danke :D , Volker
Benutzeravatar
snafu
User
Beiträge: 6736
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Der Thread, der die Daten lädt, könnte auch ein Event abfeuern, wenn er fertig ist. Die auf dieses Event lauschende Anwendung würde dann den relevanten Teil neuzeichnen und ihn dabei mit den Daten füllen. Wie das konkret in Tkinter umgesetzt werden kann, kann ich mangels Erfahrung mit diesem Toolkit aber nicht sagen.
VolkerH
User
Beiträge: 20
Registriert: Dienstag 24. September 2013, 07:16
Wohnort: 46499 Hamminkeln

@snafu: Danke für Deine Hilfe. Genau das ist momentan meine Lücke. Auch das Googeln nach dem Thema hat mich nicht weiter gebracht. Aber jetzt habe ich ein neuen Anhaltspunkt (Deine und BlackJacks Info), vielleicht finde ich etwas im Netz. Danke :D
Benutzeravatar
snafu
User
Beiträge: 6736
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@VolkerH: Deine Chancen auf Hilfe könnten sich stark erhöhen, wenn du hier noch ein lauffähiges Minimalbeispiel hinzufügst, welches den relevanten Programmteil darstellt. ;)

Dann aber bitte nicht "grob skizziert", sondern wie gesagt so, dass es problemlos ausführbar ist und du mögliche Modifikationen von Anderen relativ problemlos in deinen echten Code übernehmen könntest.
VolkerH
User
Beiträge: 20
Registriert: Dienstag 24. September 2013, 07:16
Wohnort: 46499 Hamminkeln

@snafu: Ich habe mit der Programmierung dessen noch nicht angefangen. Für mich war es wichtig zu erfahren, wie ich am besten an die Sache heran gehen soll und was dabei die zu verwendenden Funktionen sind. Mit Threads habe ich in einem anderen kleinen Python-Programm einmal zu tuen gehabt, aber ohne auf Events zu hören bzw. eine Queue zu nutzen. Daher hatte ich kein Code gepostet. Danke. :)
Benutzeravatar
snafu
User
Beiträge: 6736
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

VolkerH hat geschrieben:Wie kann ich erreichen das meine Anwendung gestartet wird, so dass das Anwendungsfenster direkt angezeigt wird und erst dann die Arbeitsdaten (in dem Fall n-Bilderdaten eines Ordners) eingelesen werden, also zeitlich aufeinander folgend?
Nur zum besseren Verständnis: Willst du die Anwendung erst ohne die Arbeitsdaten laden und dann die Bilder (Vorschaubilder?) in einem Rutsch anzeigen lassen oder ist die Anzeige eher so nach und nach gemeint - also pro Bild baut sich ein weiteres Kästchen mit dem jeweiligen Bild auf?
VolkerH
User
Beiträge: 20
Registriert: Dienstag 24. September 2013, 07:16
Wohnort: 46499 Hamminkeln

@snafu: Ich möchte die Bilder des Zielordners nacheinander einlesen und dann nach einander anzeigen (Bild für Bild). Als Anwender möchte ich den Ladevorgang sichtbar mitbekommen, ich werde wohl zusätzlich auch noch einen Fortschrittsbalken einbauen. VG, Volker
Antworten