Tkinter的问题

时间:2013-10-11 02:11:17

标签: python tkinter tk

在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窗口没有出现。 它有什么问题,我有错误?

1 个答案:

答案 0 :(得分:1)

要显示某些内容,您必须输入eventloop

最后一行

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循环后(从不)。