Я делал таймер, который кладут на холст. Все шло хорошо, пока я не поместил цикл while, который заставил мой холст Tkinter работать. Вот упрощенная версия моей проблемы.
from tkinter import *
class Second(Frame):
def __init__(self,master):
super(Second, self).__init__(master)
self.grid()
self.TimerFrame = Frame(self)
self.create_Timer_widgets()
self.TimerFrame.grid()
def create_Timer_widgets(self):
self.canvas = Canvas(self.TimerFrame,height = 100, width = 850, bg = "light grey")
self.canvas.grid(row=0,column=0)
self.canvas.create_text(400,50,text = "X")
self.canvas.create_text(75,50,text = "N)")
mins = 1
while mins > 0 :
if len(str(mins)) == 1 :
self.canvas.create_text(825,50,text = "0")
self.canvas.update()
root = Tk()
x = Second(root)
root.configure(background='light grey')
root.mainloop()
Когда я запускаю этот код, ничего не происходит. Снаряды просто ничего не делают. После удаления цикла while:
mins = 1
while mins > 0 :
if len(str(mins)) == 1 :
self.canvas.create_text(825,50,text = "0")
self.canvas.update()
Это та часть кода ^^, мой код работал. Отображает все нормально. Я нашел кое-что в Интернете, но это не сильно помогло. Я также удалил часть self.TimerFrame, и это исправило мой код, даже если цикл while не был удален, но я не могу сделать это таким образом, потому что тогда мой код просто испортится. Спасибо за помощь, ребята.
Проблема с этим кодом в том, что он никогда не выходит из цикла while. Было бы лучше, если бы либо -
вы просто запустили код один раз и удалили фактическую часть цикла,
если вы установили mins = 0
, когда хотели выйти из цикла. Цикл продолжается вечно, потому что условие выхода никогда не выполняется.
TimerFrame
никогда не отображается, потому что вы никогда не вызываетеself.TimerFrame.grid()
- вы застреваете в своем цикле до того, как код достигнет этой точки.