Nachdem es mir gelungen ist, einen Fortschrittsbalken in der Konsole zu erstellen, dachte ich über das Upgrade des Programms auf GUI nach.Etwas schief gelaufen, während ich meine Fortschrittsbalken in der GUI gemacht habe
Dies ist mein Code:
from tkinter import *
class Progress(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.grid()
self.value = 1
self.endvalue = 100
self.bar_length = 20
self.label1 = Label(self)
self.label1.grid()
self.button1 = Button(self, text = "Start", command = self.startprogress())
self.button.grid()
def startprogress(self):
while self.value <= self.endvalue:
root.after(100, self.updateprogress)
def updateprogress(self):
percent = float(self.value)/self.endvalue
arrow = '|' * int(round(percent * self.bar_length)-1) + '|'
spaces = ' ' * (self.bar_length - len(arrow))
self.label1.configure(text = "Percent: [{0}] {1}%".format(arrow + spaces, int(round(percent * 100))))
self.value+=1
root = Tk()
root.title("Progress")
app = Progress(root)
root.mainloop()
Wenn ich das Programm starten, es tut nichts; kein Fehler, kein Fenster geht hoch.
Ich begann, es zu debuggen und versuchte, das Problem zu verstehen. Wenn ich den gesamten Code unter der __init__
Funktion lösche, würde das Fenster aufgehen. Dafür denke ich, vielleicht ist die while
Schleife das Problem hier.
Kann mir jemand sagen, was das Problem in diesem Programm ist?
nicht die Funktion Sie _call_, dass Sie versuchen, zu einem Event-Handler für christssake zu verbinden. Vielleicht werden die Leute dieses Konzept in tausend Jahren endlich verstehen ... 'command = self.startprogress()' -> 'command = self.startprogress'. –
Habe es getan. Das Fenster kam auf, aber wenn ich Start drücke, friert das ganze Programm ein –
Ihre 'startprogress'-Funktion stellt eine Billion' self.updateprogress' mit 'root.after (100, self.updateprogress)' vor 'self.value' bereit immer inkrementiert. Befreien Sie sich von der Schleife und tun Sie einfach 'root.after (100, self.updateprogress)' am Ende von 'updateprogress'. –