2017-05-22 61 views
0

我的tkinter GUI中有一個treeview。每次我創建另一個類的新實例時,都會在樹視圖中插入一個新項目。我如何將類實例存儲在樹視圖中,以便在樹視圖中單擊它時可以調用實例上的函數?在Python Tkinter Treeview中存儲類實例

+0

您需要將樹視圖的引用存儲到類中,然後使用該類的可用函數生成上下文菜單。除非您選擇某些按鈕時啓用/禁用。 – Casey

+0

你是什麼意思從樹視圖的參考? – JBoy

+0

在字典中存儲參考。使索引與樹條目的文本相同。然後將一個事件綁定到樹上。 – Casey

回答

0
class MyClass(object): 
    def __init__(self, text): 
     self.text = text 
     self.value = len(text) * 5 


class App(object): 
    def __init__(self): 
     self.root = Tk() 
     self.tree = ttk.Treeview(self.root) 
     self.construct() 

    def construct(self): 
     self.tree["columns"]=("one","two") 
     self.tree.column("one", width=100) 
     self.tree.column("two", width=100) 
     self.tree.heading("one", text="coulmn A") 
     self.tree.heading("two", text="column B") 

     self.tree.insert("" , 0, text="Line 1", values=("1A","1b")) 

     id2 = self.tree.insert("", 1, "dir2", text="Dir 2") 
     self.tree.insert(id2, "end", "dir 2", text="sub dir 2", values=("2A","2B")) 

     self.tree.insert("", 3, "dir3", text="Dir 3") 
     self.tree.insert("dir3", 3, text="sub dir 3",values=("3A"," 3B")) 
     self.tree.bind("<Double-1>", self.on_double_click) 

     self.tree.pack() 

     self.my_dict = { 
      'Dir 2' : MyClass('Dir 2'), 
      'Dir 3': MyClass('Dir 3'), 
      'sub dir 2': MyClass('sub dir 2'), 
      'sub dir 3': MyClass('sub dir 3') 
      } 

     self.root.mainloop() 

    def on_double_click(self, event): 
     item = self.tree.selection()[0] 
     print(self.my_dict[self.tree.item(item,"text")]) 
     print(self.my_dict[self.tree.item(item,"text")].value) 

if __name__ == '__main__': 
    App() 

self.my_dict存儲您嘗試呼叫的對象的直接引用。雙擊對象時,將執行on_double_click事件,在這種情況下,它會打印對象引用和在__init__上實例化的對象的.value屬性。

這是您可以根據自己的意圖編寫自己想要做的事情的基礎。

+0

當你添加一個新對象時,確保用正確的鍵將它添加到'dict'中。 – Casey

+0

謝謝!但是,我如何獲得我應該用作關鍵的價值? – JBoy