В то время как цикл заставляет холст Tkinter не работать

Я делал таймер, который кладут на холст. Все шло хорошо, пока я не поместил цикл 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 не был удален, но я не могу сделать это таким образом, потому что тогда мой код просто испортится. Спасибо за помощь, ребята.

TimerFrame никогда не отображается, потому что вы никогда не вызываете self.TimerFrame.grid() - вы застреваете в своем цикле до того, как код достигнет этой точки.
jasonharper 25.10.2018 23:38
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
137
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема с этим кодом в том, что он никогда не выходит из цикла while. Было бы лучше, если бы либо -

  1. вы просто запустили код один раз и удалили фактическую часть цикла,

  2. если вы установили mins = 0, когда хотели выйти из цикла. Цикл продолжается вечно, потому что условие выхода никогда не выполняется.

Другие вопросы по теме