python tkinter如何将键绑定到按钮
Posted
技术标签:
【中文标题】python tkinter如何将键绑定到按钮【英文标题】:python tkinter how to bind key to a button 【发布时间】:2012-10-30 21:16:42 【问题描述】:编程新手,尤其是 python 和 tKinter。如何创建将键“s”绑定到按钮或函数sharpen
的方法?任何帮助都是极好的。
from Tkinter import *
from PIL import Image, ImageTk, ImageFilter, ImageEnhance
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
master.wm_title("Image examples")
self.pack()
self.createWidgets()
def createWidgets(self):
self.img = Image.open("lineage.jpg")
self.photo1 = ImageTk.PhotoImage(self.img.convert("RGB"))
self.label1 = Label(self, image=self.photo1)
self.label1.grid(row=0, column=0, padx=5, pady=5, rowspan=10)
self.photo2 = ImageTk.PhotoImage(self.img.convert("RGB"))
self.label2 = Label(self, image=self.photo2)
self.label2.grid(row=0, column=1, padx=5, pady=5, rowspan=10)
button5 = Button(self, text="Sharpen", command=self.sharpen)
button5.grid(row=4, column= 2, sticky = N)
def sharpen(self):
img2 = self.img.filter(ImageFilter.SHARPEN)
self.photo2 = ImageTk.PhotoImage(img2)
self.label2 = Label(self, image=self.photo2)
self.label2.grid(row=0, column=1, padx=5, pady=5, rowspan=10)
【问题讨论】:
【参考方案1】:您需要进行两项更改:
添加
master.bind('s', self.sharpen)
到__init__
。 (绑定到框架,self
,似乎不起作用。)
当 s 被按下时,self.sharpen(event)
将被调用。自从
Tkinter 将发送一个Tkinter.Event
对象,我们还必须更改调用
签名给
def sharpen(self, event=None):
因此,当按下按钮时,event
将被设置为默认值
值,None
,但是当按下 s 键时,event
将分配给Tkinter.Event
对象。
【讨论】:
是否会考虑按钮是否被禁用。我认为它应该与 Button.invoke() 绑定。【参考方案2】:像这样使用bind_all
:
def sharpen(self, event):
master.bind_all('s', sharpen)
您可以在Python docs找到更多信息。
【讨论】:
【参考方案3】:您可以使用bind
。我将假设您问题中的缩进是错误的,sharpen
是 Application
方法。
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
master.wm_title("Image examples")
self.pack()
self.createWidgets()
self.bind("s", self.sharpen)
Pythonware 提供有关事件处理的有用信息。
【讨论】:
以上是关于python tkinter如何将键绑定到按钮的主要内容,如果未能解决你的问题,请参考以下文章
Python3 tkinter基础 Tk quit 点击按钮退出窗体
Python3 tkinter基础 Tk quit 点击按钮退出窗体
python tkinter 中 listbox绑定scrollbar实现自动循环滚动