如何在 Tkinter 中将按键绑定到按钮?

34 阅读2分钟

一位用户正在使用 Tkinter 开发一个机器人控制界面,希望能够通过箭头键控制机器人移动。然而,他发现默认情况下,只能通过点击按钮来控制机器人。

huake_00152_.jpg 以下是他的 Tkinter 代码:

from Tkinter import *

message = ""

class App:

    def __init__(self, master):

        frame=Frame(master)
        frame.grid()

        status = Label(master, text=message)
        status.grid(row = 0, column = 0)

        self.leftButton = Button(frame, text="<", command=self.leftTurn)
        self.leftButton.grid(row = 1, column = 1)

        self.rightButton = Button(frame, text=">", command=self.rightTurn)
        self.rightButton.grid(row = 1, column = 3)

        self.upButton = Button(frame, text="^", command=self.upTurn)
        self.upButton.grid(row = 0, column = 2)

        self.downButton = Button(frame, text="V", command=self.downTurn)
        self.downButton.grid(row=2, column = 2)

    def leftTurn(self):
        message = "Left"
        print message

    def rightTurn(self):
        message = "Right"
    print message

    def upTurn(self):
        message = "Up"
        print message

    def downTurn(self):
        message = "Down"
        print message



root = Tk()
root.geometry("640x480")
root.title("Rover ")

app = App(root)

root.mainloop()

2、解决方案

为了能够将按键绑定到按钮,我们需要使用 Tkinter 的 bind() 方法。这个方法可以将一个事件绑定到一个小部件,当事件发生时,就会执行指定的函数。

在我们的例子中,我们需要将箭头键绑定到相应的按钮。我们可以使用以下代码来实现:

def leftTurn(event):
    message = "Left"
    print message

def rightTurn(event):
    message = "Right"
    print message

def upTurn(event):
    message = "Up"
    print message

def downTurn(event):
    message = "Down"
    print message

frame.bind("<Left>", leftTurn)
frame.bind("<Right>", rightTurn)
frame.bind("<Up>", upTurn)
frame.bind("<Down>", downTurn)

这样,当用户按下箭头键时,就会执行相应的函数,并更新状态标签中的消息。

完整的代码如下:

from Tkinter import *

message = ""

class App:

    def __init__(self, master):

        frame=Frame(master)
        frame.grid()

        status = Label(master, text=message)
        status.grid(row = 0, column = 0)

        self.leftButton = Button(frame, text="<", command=self.leftTurn)
        self.leftButton.grid(row = 1, column = 1)

        self.rightButton = Button(frame, text=">", command=self.rightTurn)
        self.rightButton.grid(row = 1, column = 3)

        self.upButton = Button(frame, text="^", command=self.upTurn)
        self.upButton.grid(row = 0, column = 2)

        self.downButton = Button(frame, text="V", command=self.downTurn)
        self.downButton.grid(row=2, column = 2)

    def leftTurn(self):
        message = "Left"
        print message

    def rightTurn(self):
        message = "Right"
    print message

    def upTurn(self):
        message = "Up"
        print message

    def downTurn(self):
        message = "Down"
        print message



def leftTurn(event):
    message = "Left"
    print message

def rightTurn(event):
    message = "Right"
    print message

def upTurn(event):
    message = "Up"
    print message

def downTurn(event):
    message = "Down"
    print message

frame.bind("<Left>", leftTurn)
frame.bind("<Right>", rightTurn)
frame.bind("<Up>", upTurn)
frame.bind("<Down>", downTurn)



root = Tk()
root.geometry("640x480")
root.title("Rover ")

app = App(root)

root.mainloop()