7

プログラミング、特に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)
4

3 に答える 3

16

2つの変更を加える必要があります。

  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ます。

于 2012-11-10T23:24:05.903 に答える
2

このように使用bind_allします:

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

詳細については、 Pythonのドキュメントをご覧ください。

于 2018-08-28T00:22:49.863 に答える
1

を使用できます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には、イベント処理に関する有用な情報があります。

于 2012-11-10T23:16:40.127 に答える