【问题标题】:python tkinter how to bind key to a buttonpython tkinter如何将键绑定到按钮
【发布时间】: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)

【问题讨论】:

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


    【解决方案1】:

    您需要进行两项更改:

    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 对象。

    【讨论】:

    • 是否会考虑按钮是否被禁用。我认为它应该与 Button.invoke() 绑定。
    【解决方案2】:

    像这样使用bind_all

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

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

    【讨论】:

      【解决方案3】:

      您可以使用bind。我将假设您问题中的缩进是错误的,sharpenApplication 方法。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-08
        • 2014-03-23
        • 1970-01-01
        • 2021-10-09
        • 2020-04-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多