在Python 3上编写一个小程序。有一个矩形,它必须从墙壁(窗口的边框(反弹
check=False
from tkinter import*
rect_x=50#x0 of rect
rect_y=50#y0 of rect
rect_x1=rect_x+rect_x#x1 of rect
rect_y1=rect_y+rect_y#y1 of rect
rect_change_x=5#change X speed
rect_change_y=3#change Y speed
root=Tk()
while check==False:
if rect_y > 450 or rect_y < 0:
rect_change_y = rect_change_y * -1
if rect_x > 650 or rect_x < 0:
rect_change_x = rect_change_x * -1
rect_x+=rect_change_x#changing x
rect_y+=rect_change_y#changing y
rect_x1+=rect_change_x#changing x1
rect_y1+=rect_change_y#changing y1
c=Canvas(root,bg='yellow',width=700,height=500)
c.pack()
rect=c.create_rectangle(rect_x,rect_y,rect_x1,rect_y1,fill='black')
root.mainloop()
我猜,一切都很好,但是当我运行这个程序时什么也没发生。未显示 Tkinter 窗口。怎么了,我哪里有错误?
要显示某些内容,您必须进入事件循环
最后一行
root.mainloop()
做到了。在你调用这条线之前,什么都不会画。
你在一个循环中做所有事情。
使用异步编程。用一些计时器安排下一次绘画。
check=False
from tkinter import*
rect_x=50#x0 of rect
rect_y=50#y0 of rect
rect_x1=rect_x+rect_x#x1 of rect
rect_y1=rect_y+rect_y#y1 of rect
rect_change_x=5#change X speed
rect_change_y=3#change Y speed
root=Tk()
def paintloop():
global check,rect_x,rect_y,rect_x1,rect_y1,rect_change_x,rect_change_y
root.after(100, paintloop)
if rect_y > 450 or rect_y < 0:
rect_change_y = rect_change_y * -1
if rect_x > 650 or rect_x < 0:
rect_change_x = rect_change_x * -1
...
root.after(0,paintloop)
root.mainloop()
其他一些注意事项:不要每次都创建新画布。目前,您使用第一帧创建 N 个画布,下一个是第二个帧,并将它们全部显示在前一帧下方。
完成 while 循环后(从不(。