我刚开始制作简单的python gui。我在这里工作,当我运行它时,矩形是静态的。有没有什么方法可以让矩形每秒水平移动50像素?我一直在努力修复它,但没有成功。在
from tkinter import *
import time
rectMove = True
class rectMove():
def __init__(self):
root = Tk()
frame = Frame(root, width=500, height=500)
frame.grid()
canvas = Canvas(frame, width=500, height=500)
canvas.grid()
firstX = 50
firstY = 50
secondX = 100
secondY = 100
rectangle = canvas.create_rectangle(firstX, firstY, secondX, secondY, fill="Black")
while rectMove is True:
rectangle.destroy()
time.sleep(1)
firstX += 50
secondX += 50
rectangle = canvas.create_rectangle(firstX, firstY, secondX, secondY, fill="Black")
root.mainloop()
rectMove = rectMove()
第一个问题是您有一个名为
rectMove
的全局变量,还有一个名为rectMove
的类。类定义隐藏全局变量。这一行:while rectMove is True:
表示“如果变量rectMove是布尔变量True,则循环”,这是false,因为rectMove不是变量True,它是一个类。因此,循环根本不执行。在您可能想要更像
while True:
的东西,但是这个简单的改变会暴露出其他问题。在循环中的第一行
rectangle.destroy()
引发异常。您可能需要的函数是canvas.delete(rectangle)
。在您修复并运行程序之后,您将看不到任何内容。这是因为while循环是无限的。你的程序将永远坐在那里。在Tk程序是事件驱动的。做一个定时循环并不简单。您需要使用函数:
这些文档来自http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/universal.html
与编写简单的while循环不同,您需要编写一个回调函数来删除并重新绘制矩形,然后再次调用
w.after
来重复该过程。在相关问题 更多 >
编程相关推荐