如何解决在tkinter python中同时绑定到2个事件
我正在用tkinter制作一个应用程序,tkinter是python中用于GUI编程的模块,我希望按钮对鼠标单击以及键盘输入键做出反应。有办法吗?
解决方法
您可以将多个东西绑定到小部件(包括按钮)上,但是将按键特定地绑定到按钮通常不是可行的解决方案。原因很简单。为了使小部件能够识别按键,它必须具有焦点。通常,小部件获取焦点的方式是通过单击鼠标或制表键。您可以单击窗口小部件,以便按回车键(实际上对Button
小部件不起作用),也可以多次按Tab键,直到按钮具有焦点,然后按回车键。这可能像几次按Tab或按几千一样简单。这取决于您的应用和标签顺序中的小部件数量。
您可以做的是使用bind_all
将按键重定向到点击功能(如下所示)。请记住,如果屏幕上有类似Text
的小部件,并且正在键入它,则每次按回车键都会“单击”您的按钮。当然,如果您的unbind
窗口小部件具有焦点,则可以简单地Text
按键,如果失去焦点,则可以再次bind
按键,但这会变得很混乱。特别是如果您有很多Text
小部件。我唯一能做到这一点的唯一方法就是使用F键(F1,F2等)bind_all
或使用Shift + Return之类的组合键,这种操作并不常见。 / p>
import tkinter as tk
class App(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
tk.Button(self,text="click",command=self.click).pack()
self.bind_all('<Return>',self.click)
def click(self,event=None):
if event:
print('I have been virtually clicked')
else:
print('I have been clicked')
if __name__ == "__main__":
App().mainloop()
,
是的,可以有多种方法。首先,让我们更好地了解诸如invoke()
之类的按钮方法,这些按钮方法用于调用作为参数传递给command
的回调函数。因此,将invoke()
方法绑定到<Return>
序列,我们可以使用 return 键 如果按钮具有焦点 ,则调用回调函数。要使焦点集中在按钮上,我们可以使用tab键,系统默认边框会指出哪个窗口小部件具有焦点。
因此,请看此示例,在这里可以通过单击按钮以及在按钮具有焦点时按下 return 键来调用回调函数。要使按钮成为焦点,请按 tab 键,然后按 return 键。
import tkinter as tk
import tkinter.ttk as ttk
def func():
print('Button is pressed')
root = tk.Tk()
root.geometry('200x200')
b1 = ttk.Button(root,text='Button 1',command=func)
b1.bind('<Return>',lambda e: b1.invoke())
b1.pack()
root.mainloop()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。