2014-02-09 24 views
1

這裏是奇怪的事情: 說,你有一個tk.Button(RUN)一類中,你可以指定一個像蟒蛇Tkinter的列表框回調:通過一個類實例特定回調

self.RUN["command"] = self.run 
回調

這是指類中的一個函數,它可以訪問所有成員。實質上,回調看到一個類實例。

你也可以創建一個tk.ListBox。獲得選擇的機制涉及事件。 你不能像上面那樣傳遞一個類實例。 回調只能看到Tk中的不透明事件/小部件。

你可以做

def CurSelect(evt) : 
    ... 
lb.bind('<<ListboxSelect>>',CurSelect) 

但沒有辦法通過比事件的更多。

因此,當您在主循環中運行多個ListBox時會發生什麼? 如何將事件/小部件映射到擁有事件/小部件的類實例?

當然,你可以製作一些全球地圖。 (醜,嘗試,我討厭它。) 有什麼更好的嗎?

+0

請在問題中包含更多實際代碼以獲得具體答案。 – martineau

回答

4

您可以嘗試使用lambda來傳遞參數。

arguments = [] 
widget.bind("<>", lambda event, arg=arguments: cur_select(event, arg)) 

def cur_select(event, arg): 
    return 

此外,Python函數的命名約定:小寫字母與下劃線之間用下劃線分隔以提高可讀性。

+0

非常感謝!是的,它的工作原理。其實,我想出了自己。 (我是Python新手,事情並不自然。) – user3288731