一位用户正在使用 Tkinter 开发一个机器人控制界面,希望能够通过箭头键控制机器人移动。然而,他发现默认情况下,只能通过点击按钮来控制机器人。
以下是他的 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()