Wie erstelle ich den Fortschrittsbalken in ttk?

Ich möchte einen Fortschrittsbalken beim Herunterladen einer Datei aus dem Web mit der Methode urllib.urlretrive .

Wie verwende ich die ttk.Progressbar ?

Hier ist was ich bisher gemacht habe

 from tkinter import ttk from tkinter import * root = Tk() pb = ttk.Progressbar(root, orient="horizontal", length=200, mode="determinate") pb.pack() pb.start() root.mainloop() 

Aber es hält einfach Schleifen.

4 Solutions collect form web for “Wie erstelle ich den Fortschrittsbalken in ttk?”

Für einen bestimmten Modus willst du nicht start . Stattdessen konfigurieren Sie einfach den value des Widgets oder rufen Sie die step .

Wenn du im voraus weißt, wie viele Bytes du herunterschickst (und ich nehme an, dass du da machst, da du einen bestimmten Modus benutzt hast), ist die einfachste Sache zu tun, die maxvalue Option auf die Nummer zu setzen, die du lesen wirst. Dann, jedes Mal, wenn Sie ein Chunk lesen Sie konfigurieren den value , um die Gesamtzahl der Bytes lesen. Der Fortschrittsbalken wird dann den Prozentsatz herausfinden.

Hier ist eine Simulation, um Ihnen eine grobe Vorstellung zu geben:

 import tkinter as tk from tkinter import ttk class SampleApp(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) self.button = ttk.Button(text="start", command=self.start) self.button.pack() self.progress = ttk.Progressbar(self, orient="horizontal", length=200, mode="determinate") self.progress.pack() self.bytes = 0 self.maxbytes = 0 def start(self): self.progress["value"] = 0 self.maxbytes = 50000 self.progress["maximum"] = 50000 self.read_bytes() def read_bytes(self): '''simulate reading 500 bytes; update progress bar''' self.bytes += 500 self.progress["value"] = self.bytes if self.bytes < self.maxbytes: # read more bytes after 100 ms self.after(100, self.read_bytes) app = SampleApp() app.mainloop() 

Für diese zu arbeiten, müssen Sie sicherstellen, dass Sie nicht blockieren die GUI-Thread. Das heißt, man liest in Klumpen (wie im Beispiel) oder das Lesen in einem separaten Thread. Wenn Sie Threads verwenden, können Sie die progressbar-Methoden nicht direkt anrufen, da tkinter Single Thread ist.

Sie könnten das progressbar Beispiel auf tkdocs.com finden , um nützlich zu sein.

Wenn du nur einen Fortschrittsbalken willst, um zu zeigen, dass das Programm beschäftigt ist / arbeiten, ändere einfach den Modus von bestimmter bis unbestimmter

 pb = ttk.Progressbar(root,orient ="horizontal",length = 200, mode ="indeterminate") 

Ich habe den Code für Sie vereinfacht.

 import sys import ttk from Tkinter import * mGui = Tk() mGui.geometry('450x450') mGui.title('Hanix Downloader') mpb = ttk.Progressbar(mGui,orient ="horizontal",length = 200, mode ="determinate") mpb.pack() mpb["maximum"] = 100 mpb["value"] = 50 mGui.mainloop() 

Ersetzen Sie 50 mit dem Prozentsatz des Downloads.

Ich möchte auf etwas hinweisen, das aus der Simulation nicht ersichtlich ist. Bei einigen Betriebssystemen wird os.stat () 0 zurückgeben, wenn eine leere Datei zum Schreiben geöffnet wurde, bis das Dateizugriff geschlossen ist. Dies wird die Fähigkeit des Fortschrittsbalken, der die fortschreitende Größe einer heruntergeladenen Datei zeigt, besiegen.

  • Progressbar (ttk.Progressbar) mit python in tkinter nicht zeigen
  • Wie bekomme ich FLAT Relief Entry Widget in python ttk?
  • Tastenbefehle in Tkinter
  • Ttk.Button gibt keine zurück
  • On-Value-Change-Art von Veranstaltung für Widgets oder verwenden .trace_variable () Technik?
  • Standardtext sowie Liste textvariable Eintrags-Widget Tkinter
  • Tkinter: ProgressBar mit unbestimmter Dauer
  • Gibt es eine Möglichkeit, Tabs eines Notebooks untereinander zu setzen?
  • Ändernde Farbe von ttk.Progressbar Elemente in der xpnative Thema - Python
  • Ttk.Treeview - Änderungsreihenfolge kann nicht geändert werden
  • Erstelle ein neues ttk-Widget von tkinter
  • Python ist die beste Programmiersprache der Welt.