如何在Python Gui中移动矩形

2024-09-29 17:09:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始制作简单的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()

Tags: importtruetimerootwidthframecanvasheight
1条回答
网友
1楼 · 发布于 2024-09-29 17:09:35

第一个问题是您有一个名为rectMove的全局变量,还有一个名为rectMove的类。类定义隐藏全局变量。这一行:while rectMove is True:表示“如果变量rectMove是布尔变量True,则循环”,这是false,因为rectMove不是变量True,它是一个类。因此,循环根本不执行。在

您可能想要更像while True:的东西,但是这个简单的改变会暴露出其他问题。在

循环中的第一行rectangle.destroy()引发异常。您可能需要的函数是canvas.delete(rectangle)。在您修复并运行程序之后,您将看不到任何内容。这是因为while循环是无限的。你的程序将永远坐在那里。在

Tk程序是事件驱动的。做一个定时循环并不简单。您需要使用函数:

w.after(delay_ms, callback=None, *args)

Requests Tkinter to call function callback with arguments args after a delay of at least delay_ms milliseconds

这些文档来自http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/universal.html

与编写简单的while循环不同,您需要编写一个回调函数来删除并重新绘制矩形,然后再次调用w.after来重复该过程。在

相关问题 更多 >

    热门问题