Python 在画布小部件上绑定按键事件
我通过以下方式将一把钥匙绑定到画布上:Python 在画布小部件上绑定按键事件,python,tkinter,tkinter-canvas,Python,Tkinter,Tkinter Canvas,我通过以下方式将一把钥匙绑定到画布上: self.canvas.bind("<w>", lambda event: self.canvas.focus_set()) self.canvas.bind(“,lambda事件:self.canvas.focus\u set()) 现在,我该怎么做?当按下该键时,它会调用一个特定的操作,例如在画布上向上移动对象?根据您需要的文档,请执行以下操作: 如果尚未这样做,请在self.canvas.bind()的第一个参数处指定要绑定为模式的键
self.canvas.bind("<w>", lambda event: self.canvas.focus_set())
self.canvas.bind(“,lambda事件:self.canvas.focus\u set())
现在,我该怎么做?当按下该键时,它会调用一个特定的操作,例如在画布上向上移动对象?根据您需要的文档,请执行以下操作:
# Sample event handler
def handle_up_key(self, event):
self.canvas.focus_set()
# Do whatever else you want.
def __init__(self):
self.canvas.bind("<Key-Up>", self.handle_up_key)
self.canvas.bind("<KeyPress-Up>", ...)
self.canvas.bind("<KeyRelease-Up>", ...)
# And so for any key you want to map.
#示例事件处理程序
def句柄向上键(自身、事件):
self.canvas.focus_set()
#你还想做什么就做什么。
定义初始化(自):
self.canvas.bind(“,self.handle\u up\u键)
self.canvas.bind(“,…)
self.canvas.bind(“,…)
#因此,对于要映射的任何关键点。
更多信息:
W
时指定新坐标
您可以找到画布对象支持的方法。有一个叫做coords
,它允许您通过对象的ID
指定对象的坐标。ID是创建对象时返回的值,例如,创建椭圆时返回的值:
oval_id = canvas.create_oval(x1, y1, x2, y2)
ID是唯一的,因此可以使用它们专门移动一个对象。
例如,你可以用一种方法将某个字母的点击(例如,w
)绑定到所有的
,从而移动我们的椭圆。下面是一个完整的工作示例(我不喜欢使用全局
,但在本例中,我使用它是为了简单):
试试看:
使用Python 3将tkinter导入为tk#
除恐怖外:
使用Python 2将Tkinter导入为tk#
def移动(事件=无):
全局x1、x2、y1、y2、椭圆形
如果event.char==“w”:
y1-=10
y2-=10
椭圆=(x1,y1,x2,y2)
canvas.coords(椭圆形,椭圆形)
m=tk.tk()
画布=传统画布(m)
canvas.pack(expand=1,fill='both')
x1,x2=50100
y1,y2=50100
椭圆=(x1,y1,x2,y2)
椭圆形=画布。创建椭圆形(椭圆形)
画布。绑定所有(“”,移动)
m、 mainloop()
您可能需要提到的是,画布还需要有键盘焦点,以便首先为其提供事件。
try:
import tkinter as tk # using Python 3
except ImportError:
import Tkinter as tk # using Python 2
def move(event=None):
global x1, x2, y1, y2, oval
if event.char == 'w':
y1 -= 10
y2 -= 10
oval = (x1, y1, x2, y2)
canvas.coords(oval_id, oval)
m = tk.Tk()
canvas = tk.Canvas(m)
canvas.pack(expand=1, fill='both')
x1, x2 = 50, 100
y1, y2 = 50, 100
oval = (x1, y1, x2, y2)
oval_id = canvas.create_oval(oval)
canvas.bind_all('<w>', move)
m.mainloop()