Tkinter window 未打开
Tkinter window not opening
我在 Python 3 中尝试使用 tkinter 创建一个简单的移动块,在我导入时间之前一切正常。 window 现在打不开了。我试过删除导入,但没有帮助。这是我的代码:
from tkinter import *
import time
canvas_height = 400
canvas_width = 600
canvas_colour = "grey50"
moveBoolean = "True"
def move():
global moveBoolean
while moveBoolean == "True":
time.sleep(0.005)
canvas.move(square, 90, 90)
time.sleep(0.005)
canvas.move(square, 180, 180)
time.sleep(0.005)
canvas.move(square, 50, 100)
window = Tk()
canvas = Canvas(bg=canvas_colour, height=canvas_height, width=canvas_width, highlightthickness=0)
canvas.pack()
square = canvas.create_rectangle(50, 50, 50, 50, width=50, fill="black")
move()
window.mainloop()
这些问题通常可以通过使用 classes 来解决,恕我直言,您应该在编码 GUI 之前学习和使用它。你不应该使用 time() 因为它会中断无限的 Tkinter 循环。改用 Tkinter 的 after() 。此外,您永远不会将 moveBoolean 设置为 False,因此 while 语句会一直运行,直到程序被取消,并且第二次通过正方形将离开 canvas,这就是您看不到任何东西的原因。以下解决了您的问题,但如果使用 class 结构会更好。
from tkinter import *
from functools import partial
canvas_height = 400
canvas_width = 600
canvas_colour = "grey50"
moveBoolean = "True"
def move_it(ctr=0):
if ctr < len(coords):
x, y = coords[ctr]
ctr += 1
print ctr, x, y
canvas.move(square, x, y)
window.after(1000, partial(move_it, ctr))
window = Tk()
canvas = Canvas(bg=canvas_colour, height=canvas_height,
width=canvas_width, highlightthickness=0)
canvas.pack()
square = canvas.create_rectangle(50, 50, 50, 50, width=50, fill="black")
coords = ((90, 90),
(180, 180),
(50, 50))
move_it()
window.mainloop()
我在 Python 3 中尝试使用 tkinter 创建一个简单的移动块,在我导入时间之前一切正常。 window 现在打不开了。我试过删除导入,但没有帮助。这是我的代码:
from tkinter import *
import time
canvas_height = 400
canvas_width = 600
canvas_colour = "grey50"
moveBoolean = "True"
def move():
global moveBoolean
while moveBoolean == "True":
time.sleep(0.005)
canvas.move(square, 90, 90)
time.sleep(0.005)
canvas.move(square, 180, 180)
time.sleep(0.005)
canvas.move(square, 50, 100)
window = Tk()
canvas = Canvas(bg=canvas_colour, height=canvas_height, width=canvas_width, highlightthickness=0)
canvas.pack()
square = canvas.create_rectangle(50, 50, 50, 50, width=50, fill="black")
move()
window.mainloop()
这些问题通常可以通过使用 classes 来解决,恕我直言,您应该在编码 GUI 之前学习和使用它。你不应该使用 time() 因为它会中断无限的 Tkinter 循环。改用 Tkinter 的 after() 。此外,您永远不会将 moveBoolean 设置为 False,因此 while 语句会一直运行,直到程序被取消,并且第二次通过正方形将离开 canvas,这就是您看不到任何东西的原因。以下解决了您的问题,但如果使用 class 结构会更好。
from tkinter import *
from functools import partial
canvas_height = 400
canvas_width = 600
canvas_colour = "grey50"
moveBoolean = "True"
def move_it(ctr=0):
if ctr < len(coords):
x, y = coords[ctr]
ctr += 1
print ctr, x, y
canvas.move(square, x, y)
window.after(1000, partial(move_it, ctr))
window = Tk()
canvas = Canvas(bg=canvas_colour, height=canvas_height,
width=canvas_width, highlightthickness=0)
canvas.pack()
square = canvas.create_rectangle(50, 50, 50, 50, width=50, fill="black")
coords = ((90, 90),
(180, 180),
(50, 50))
move_it()
window.mainloop()