如果我左键单击鼠标,我想让形状向左移动,如果我单击右键,则向右移动。以下代码无效。我做错了什么?
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()
答案 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
方法实现此定期更新。