Python GUI程式設計-1.7 Bound方法
阿新 • • 發佈:2019-01-30
讓我們回到GUI程式設計,儘管函式和lambda表示式在許多情況下已經夠用,類例項的bound方法在GUI程式中作為回撥處理器特別好用,它們既可以記錄事件傳送的目標例項也可以記錄相關方法呼叫的例項。例如:
from tkinter import * class HelloClass: def __init__(self): widge = Button(None, text='hello event world', command=self.quit) widge.pack() def quit(self): print('hello event world') sys.exit() HelloClass() mainloop()
這段程式碼採用了註冊bound類方法而不是函式或lambda,按鈕按下時,tkinter像通常一樣無參呼叫該類的quit方法。在實際上,它去收到了一個引數——原始的self物件,儘管tkinter沒有顯式地傳遞它。因為self.quit的bound方法包括了self和quit,可與簡單的函式呼叫共用,python會自動將self引數傳遞給method函式。相反的,註冊帶一個引數的UNbound例項方法,如HelloClass.quit,並不起作用,因為稍後事件發生時,沒有self物件來傳值。
後來,我們會看到類回撥處理器的編碼方案提供了一個天然的位置來記錄用於事件的資訊,只需將資訊新增到self例項的屬性中:
from tkinter import *
class HelloClass:
def __init__(self):
self.x = 3
self.y = 4
widge = Button(None, text='hello event world', command=self.quit)
widge.pack()
def handler(self):
呼叫self.x和self.y