Задать вопрос
@NaitonOlgran

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

Всем привет, подскажите, почему в книге пример написан без mainloop, но без него ничего не выводится на экран?
При запуске этого кода без цикла почему-то вылетает 6 оконо(одно основное с шаром и 5 маленьких пустых), из-за чего?
А с циклом они генерируются бесконечно, причем не основные с шаром, а маленькие и пустые.
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)

tk.mainloop()
  • Вопрос задан
  • 237 просмотров
Подписаться 1 Средний 2 комментария
Решения вопроса 1
@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)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы