python tkinter如何将键绑定到按钮

时间:2012-11-10 23:05:53

标签: python python-2.7 tkinter python-imaging-library

编程新手,特别是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)

3 个答案:

答案 0 :(得分:14)

您需要进行两项更改:

  1. 添加

    master.bind('s', self.sharpen)
    

    __init__。 (绑定到框架self似乎不起作用。)

  2. 按下 s 时,将调用self.sharpen(event)。以来 Tkinter将发送一个Tkinter.Event对象,我们还必须更改呼叫 签名

    def sharpen(self, event=None):
    

    因此,按下按钮时,event将被设置为默认值 值None,但按下 s 键时,event 将被分配到Tkinter.Event对象。

答案 1 :(得分:1)

您可以使用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提供了有关事件处理的有用信息。

答案 2 :(得分:0)

像这样使用bind_all

def sharpen(self, event):
    master.bind_all('s', sharpen)

您可以在Python docs上找到更多信息。