Progressbar (ttk.Progressbar) mit python in tkinter nicht zeigen

Mit der ttk.Progressbar in Python (in einer tkinter GUI) versuche ich, eine Fortschrittsanzeige zu sehen, wenn ich eine Taste drücke. Klicken Sie auf die Schaltfläche "Analysieren" auf der Gui ruft die Funktion analysieren in das Skript, die ich gemeint haben, um eine dreistufige Rakete der Art zu sein:

  1. Grid () das progressbar-widget, um es zum mainframe hinzuzufügen, und start () it.

  2. Ist das eigentliche Rechnen (das dauert etwa drei Sekunden in meinen Testläufen)

  3. Stop () die progressbar und grid_remove () es, um es aus dem Benutzer wieder zu verstecken, jetzt, dass der Job abgeschlossen ist.

Wenn ich Schritt 3 kommentiere, wird die Fortschrittsleiste angezeigt und wie erwartet gestartet, während Schritt 2 ausgeführt wird. Aber wenn Schritt drei bleibt, wird die Fortschrittsanzeige niemals an erster Stelle gezeigt. Nun, da die Arbeit in Schritt zwei auf jede Weise ausgeführt wird, gehe ich davon aus, dass es mit dem Raster und dem Entfernen des progressbar-widget im selben Funktionsaufruf etwas zu tun haben könnte, aber da ist das erste echte Gui-Projekt In python, ich bin ein bisschen auf einen Verlust auf, wie man um das herum umgehen (wenn das tatsächlich das Problem ist). Gibt es einen Weg um diese, oder ein Weg, um eleganter die gleiche Aufgabe zu erfüllen? Die Funktion der Tastenanrufe ist wie folgt:

def analyze(): # --Step 1-- progressbar.grid() progressbar.start() # --Step 2-- global analysis analysis = analyzer.Analysis(file_path.get()) analysis.output_to_file() # --Step 3-- progressbar.stop() progressbar.grid_remove() 

Ich würde ein Bild von meiner Schnittstelle zu klären, um weiter zu klären, aber meine seit meiner aktuellen Reputation Score nicht erlauben Posting von Bildern, ich hoffe, ich habe das Problem klar genug mit meiner Erklärung (und Code).

One Solution collect form web for “Progressbar (ttk.Progressbar) mit python in tkinter nicht zeigen”

Damit das Widget nach der Erstellung erscheinen kann, muss die Ereignisschleife ausgeführt werden. Das ist, weil die eigentliche Zeichnung des Widgets auf dem Bildschirm passiert als Ergebnis eines redraw Ereignisses.

Sie können update_idletasks die es der Ereignisschleife ermöglichen, solche update_idletasks , nachdem Sie die Fortschrittsleiste erstellt und update_idletasks . Allerdings, während Ihre Berechnung läuft Ihre App wird wahrscheinlich erscheinen gefroren. Auch dies ist, weil die Event-Schleife erlaubt werden, um Ereignisse zu versorgen, die es nicht tun kann, wenn andere Dinge tun.

Der normale Weg, um dieses Problem zu lösen ist, um Ihre lang laufende Berechnung in einem Thread oder separaten Prozess laufen.

  • Wie bekomme ich Tabs eines ttk Notebooks in verschiedenen Reihen?
  • So erstellen Sie eine Baumansicht mit Kontrollkästchen in Python
  • Python tkinter mit ttk Kalender
  • So stellen Sie die minimale und maximale Höhe oder Breite eines Rahmens ein?
  • Wie mache ich einen Screenshot von einer tkinter Anwendung?
  • Python: Tkinter / ttk themed Message Box
  • Gibt es eine Möglichkeit, Tabs eines Notebooks untereinander zu setzen?
  • Python ttk.Progressbar
  • Ttk.Button gibt keine zurück
  • Mehr auf tkinter optionmenu erste Option verschwindet
  • Kann nicht Hintergrundfarbe ttk python os x mit Stilen setzen
  • Python ist die beste Programmiersprache der Welt.