python - 将击键绑定到 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()
我无法开始工作的一件事是将键盘键绑定到我创建的按钮。可能吗?
任何帮助将不胜感激!
谢谢
解决方案
首先,通过重写代码以使用 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>
或当您将鼠标悬停在绑定的小部件上时触发。
不过你必须小心,因为默认情况下,新绑定将替换现有绑定(除非你传入 '+' 作为绑定方法的第三个参数),并且会触发当前聚焦的小部件的回调(如果适用) . 对于通用绑定,如果可能,您应该将它们绑定到根小部件。
推荐阅读
- javascript - 未捕获的 ReferenceError:在 __webpack_require__ 的 Object.babel-polyfill 中未定义 require
- github - 如何在 Github 中自动将一个分支合并到另一个分支中?
- require - 在 Nashorn JavaScript 引擎中,如何从文件系统中读取文件?
- python - python - 在主 x 轴旁边制作一个附加(寄生轴)
- javascript - React 启动和构建导致堆内存不足
- usrp - USRP - 子板安装问题
- django-rest-framework - 如果我不更新其余框架中的图像,我将无法更新数据
- java - 使用 microsoft EWS java api 阅读带有乱码的电子邮件失败
- java - 如何从控制台隐藏输出行
- sql - Postgresql 查询检索每个 id 的最后插入行