Этот вопрос закрыт для ответов, так как повторяет вопрос Почему окно не обновляется, а размножается?
@NaitonOlgran

Почему окно не обновляется, а размножаются?

Всем привет, подскажите, после добавления цикла, вместо обновления главного окна, они размножаются до бесконечности, причем не одинаковые окна с шаром, а добавления кучи маленьких и пустых.
Без цикла эта программа не работает, не выводится на экран ничего.
С использованием mainloop() выводится 6 окон почему-то, а с добавлением цикла тоже бесконечное число генерируется.
В чём ошибка?
Как запускать этот код без mainloop, т.е. в учебнике про него ничего не написано(пример кода).
И почему с ним вылезает 6 оконо?
import tkinter
import random
import time

class Ball:
	def __init__(self,canvas,color):
		self.canvas = canvas
		self.id = canvas.create_oval(10,10,25,25,fill=color)
		self.canvas.move(self.id, 245,100)
	def draw(self):
		pass

tk = tkinter
tk.Tk().title("game")
tk.Tk().resizable(0,0)
tk.Tk().wm_attributes("-topmost", 1)
canvas = tk.Canvas(tk.Tk(), width=500, height=400, bd=0,highlightthickness=0)
canvas.pack()
tk.Tk().update()
ball = Ball(canvas, "red")

while 1:
	tk.Tk().update_idletasks()
	tk.Tk().update()
	time.sleep(0.01)
  • Вопрос задан
  • 75 просмотров
Ответы на вопрос 1
Avrong
@Avrong
Вызывая Tk() каждый раз, вы создаете новый экземпляр класса, а строка tk=tkinter просто присваивает переменной tk библиотеку. Для создания одного окна вы должны вызвать Tk() только один раз и затем модифицировать только один экземпляр класса.

from tkinter import Tk, Canvas
import random
import time

class Ball:
    def __init__(self, canvas, color):
        self.canvas = canvas
        self.id = canvas.create_oval(10, 10, 25, 25, fill=color)
        self.canvas.move(self.id, 245, 100)
  
    def draw(self):
        pass

tk = Tk()
tk.title("game")
tk.resizable(0, 0)
tk.wm_attributes("-topmost", 1)
canvas = Canvas(tk, width=500, height=400, bd=0, highlightthickness=0)
canvas.pack()
tk.update()
ball = Ball(canvas, "red")

while True:
    tk.update_idletasks()
    tk.update()
    time.sleep(0.01)
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы