from Tkinter import *
root = Tk()
canvas = Canvas(root, width = 300, height = 300)
canvas.pack()
one = canvas.create_rectangle(100, 100, 500, 500, fill = 'red')
two = canvas.create_rectangle(200, 200, 500, 500, fill = 'green')
def move_rectangle(canvas, one):
canvas.move(one, 2, 3)
canvas.move(two,4,5)
def callback(event):
move_rectangle(canvas, one)
move_rectangle(canvas, two)
canvas.bind("<Button-1>", callback)
canvas.pack(expand = YES, fill = BOTH)
mainloop()
如果我将Button-1更改为其他任何内容,则不会发生任何事情。现在,两个不同的矩形将在屏幕上移动。我正在尝试为矩形1设置绑定,为矩形2设置不同的键绑定。但是,我甚至无法绑定除Button-1以外的任何东西。如果我将Button-1更改为Button-2没有任何反应,我也尝试了Return和箭头键,没有运气。
答案 0 :(得分:1)
如果您在代码中将<Button-1>
更改为<Button-2>
,则鼠标右键应该可以正常工作。可能有一些奇怪的平台/版本特有的奇怪,但不知道你的系统,我不能发表评论。
但是将其更改为例如<Left>
不将起作用。只有具有键盘焦点的窗口才能获得键盘事件。由于您没有任何文本输入类型的自动聚焦小部件,并且没有做任何明确设置焦点的事情,那就是您的root
。
所以,有两个修复。任何一个都可以工作,并且在你的特定情况下(Canvas
拥有整个根,并且在任何地方都没有其他小部件),我不认为它们之间会有太大的区别。
canvas.focus_set
之前致电mainloop
。root.bind
而非canvas.bind
。需要注意的另一件事是:在许多* nix系统上,当您从终端运行Tkinter脚本时,它实际上并没有跳转到前台。因此,在您单击窗口某处之前,它不会接收键盘输入。