首页 > 解决方案 > 将击键绑定到 Tkinter 中的按钮

问题描述

我是 python 的新手(从今天开始)。我正在寻找自动化我经常做的事情,到目前为止,我已经通过谷歌搜索和尝试我发现的东西获得了 40% 的需求。

我正在尝试生成一个计数器,当我单击按钮时,我希望计数器增加 - 我有这个工作......

from tkinter import *

root = Tk()

#Definitions of the fruit, links in with buttons with e1/2/3 
def Appleadd_1(event):
    value = int(e1.get())
    value += 1
    e1.delete(0, 'end')
    e1.insert(0, value)


def Pearadd_1():
    value = int(e2.get())
    value += 1
    e2.delete(0, 'end')
    e2.insert(0, value)


def Grapeadd_1():
    value = int(e3.get())
    value += 1
    e3.delete(0, 'end')
    e3.insert(0, value)


#text boxes for counts
e1 = tk.Entry(root)
e1.insert(0, 0) 
e1.pack()

e2 = tk.Entry(root)
e2.insert(0, 0) 
e2.pack()

e3 = tk.Entry(root)
e3.insert(0, 0) 
e3.pack()


#buttons
bt1 = tk.Button(root, text="Apples", command=Appleadd_1)
bt1.bind("<q>" , )
bt1.pack() 

bt2 = tk.Button(root, text="Pears", command=Pearadd_1)
bt2.pack()
bt2.bind("1", bt2)

bt3 = tk.Button(root, text="Grapes", command=Grapeadd_1)
bt3.pack()


root.mainloop() 

虽然它看起来很难看,但它可以工作,我刚刚找到了如何放置东西而不是使用pack()

我无法开始工作的一件事是将键盘键绑定到我创建的按钮。可能吗?

任何帮助将不胜感激!

谢谢

标签: pythontkinter

解决方案


首先,通过重写代码以使用 OOP,您将受益匪浅。与许多其他工具包一样,Tkinter 在使用继承和类将小部件组合在一起时效果最佳。

至于您的实际问题,是的,您可以将函数绑定到 tkinter 中的击键,这相对容易。

import tkinter as tk

def on_button_click(self, event=None): # command= takes a function with no arguments while .bind takes a function with one argument
    print("Clicked the button!")

root = tk.Tk()
button = tk.Button(root, text="Click me!", command=on_button_click)
root.bind("<Control-a>", on_button_click)

请注意,您可以将多个按键绑定到函数。您还可以绑定鼠标事件,如滚动、单击或拖动鼠标,各种键绑定组合,如 Shift+Tab 或 Ctrl+F,以及其他事件,如<Configure>窗口更改大小时触发的事件<Enter><Leave>或当您将鼠标悬停在绑定的小部件上时触发。

不过你必须小心,因为默认情况下,新绑定将替换现有绑定(除非你传入 '+' 作为绑定方法的第三个参数),并且会触发当前聚焦的小部件的回调(如果适用) . 对于通用绑定,如果可能,您应该将它们绑定到根小部件。


推荐阅读