コンソールでプログレスバーを作成した後、プログラムをGUIにアップグレードすることを考えました。GUIでプログレスバーを作成中に何か問題が発生しました
これは私のコードです:私はプログラムを起動すると
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()
、それは何もしません。エラーも窓も上がらない。
私は、問題を理解しようとすると、デバッグを開始しました。 __init__
の機能の下にあるすべてのコードを消去すると、ウィンドウが表示されます。そのためにはおそらくwhile
ループが問題になると思います。
誰かが私にこのプログラムの問題点を教えてもらえますか?このコードでは
あなたはchristssakeのイベントハンドラに接続しようとしている機能を_call_ないでください:あなたはおそらくやりたいこと
はこれです。たぶん、1000年後に人々はついにこのコンセプトを理解するでしょう... 'command = self.startprogress()' - > 'command = self.startprogress'。 –
それをしました。ウィンドウが表示されたが、Startを押すとプログラム全体がフリーズする –
'startprogress'関数は' self.updateprogress'を 'root.after(100、self.updateprogress)'の前に 'self.value'の前にキューイングしますこれまでに増分された。ループを取り除き、 'updateprogress'の最後に' root.after(100、self.updateprogress) 'を実行してください。 –