До сих пор я заканчивал свои программы Tkiter: tk.mainloop()
, или ничего не появилось! Пример:
from Tkinter import *
import random
import time
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()
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
ball = Ball(canvas, "red")
tk.mainloop()
Однако, когда вы попробовали следующий шаг в этой программе (заставляя мяч двигаться по времени), прочитанная вами книга, говорит, чтобы сделать следующее. Измените функцию рисования на:
def draw(self):
self.canvas.move(self.id, 0, -1)
и добавьте следующий код в мою программу:
while 1:
ball.draw()
tk.update_idletasks()
tk.update()
time.sleep(0.01)
Но я заметил, что добавление этого блока кода делает использование tk.mainloop()
бесполезным, поскольку все будет отображаться даже без него.
В этот момент я должен упомянуть, что моя книга никогда не говорит о tk.mainloop()
(возможно, потому, что она использует Python 3), но я узнал об этом в Интернете, так как мои программы не работали, копируя код книги!
Поэтому я попытался сделать следующее, что не сработало бы!!!
while 1:
ball.draw()
tk.mainloop()
time.sleep(0.01)
Что происходит? Что делает tk.mainloop()
? Что делают tk.update_idletasks()
и tk.update()
и как это отличается от tk.mainloop()
? Должен ли я использовать вышеуказанный цикл? tk.mainloop()
? или оба в моих программах?