在Tkinter

时间:2018-04-16 06:22:59

标签: python tkinter

如果我左键单击鼠标,我想让形状向左移动,如果我单击右键,则向右移动。以下代码无效。我做错了什么?

from tkinter import  *
import time

tk =Tk()
canvas = Canvas(tk, width=500,  height=500,)
tk.title("Drawing")

xbat = 0

def clickL(event):
    xbat =- 1
    print(xbat)


def clickR(event):
    xbat =+ 1
    print(xbat)


canvas.bind("<Button-1>", clickL)
canvas.bind("<Button-3>", clickR)


canvas.pack()

bat =  canvas.create_rectangle(150, 500,  300,  480, fill="black")


while True:
    canvas.move(bat,xbat,0)
    tk.update()

    time.sleep(0.01)



canvas.mainloop()

1 个答案:

答案 0 :(得分:1)

试试这个

from tkinter import  *

tk =Tk()
canvas = Canvas(tk, width=500,  height=500,)
tk.title("Drawing")

def clickL(event):
    xbat = -1
    print(xbat)
    xmove(bat,xbat)


def clickR(event):
    xbat = 1
    print(xbat)
    xmove(bat,xbat)

def xmove(object,x):
    canvas.move(object,x,0)


canvas.bind("<Button-1>", clickL)
canvas.bind("<Button-3>", clickR)


canvas.pack()

bat =  canvas.create_rectangle(150, 500,  300,  480, fill="black")


canvas.mainloop()

在tkinter代码中使用while True循环通常是不好的做法,它没有给GUI时间更新。相反,我改变了你的代码,以便每个click事件都调用一个单独的xmove函数。

另一种方法可能是在单击按钮时更改对象的坐标,然后使用周期性update函数重新绘制/移动对象到其更新位置。可以使用tkinter .after方法实现此定期更新。