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())

现在,我该怎么做?当按下该键时,它会调用一个特定的操作,例如在画布上向上移动对象?

根据您需要的文档,请执行以下操作:

  • 如果尚未这样做,请在self.canvas.bind()的第一个参数处指定要绑定为模式的键
  • 第二个参数可以是lambda表达式、函数或类方法
  • 例如:

    # 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()