2017-10-05 198 views
1

我正在寫一個簡單的腳本,創建一個ttk treeview(作爲一個表),並且,當你雙擊它,它會打開一個文件(保存路徑字典)。雙擊打開,可以通過這種方法:不同的tkinter綁定任何ttk treeview行

t.bind("<Double-1>", lambda f=nt[x]["URIallegato"]: os.startfile(str(f))) 

然而,這並沒有給我行(存儲在#0列)的ID。使用ID,我可以獲取保存在字典中的文件的路徑。 以下是完整的Treeview代碼:

t=Treeview(w) 
t.pack(padx=10,pady=10) 
for x in list(nt.keys()): 
    t.insert("",x,text=nt[x]["allegati"]) 
    if nt[x]["allegati"]!="": 
     t.bind("<Double-1>", 
       lambda f=nt[x]["URIallegato"]: os.startfile(str(f))) 

謝謝!

+0

要覆蓋的方法結合到TreeView't',我在你的最後一個問題給出了一個答案... – PRMoureu

+0

[Tkinter的/ TTK的可能的複製 - 防止串ButtonPress轉換](https://stackoverflow.com/questions/46506048/tkinter-ttk-prevent-string-to-buttonpress-conversion) – PRMoureu

回答

0

執行此操作的正常方法是綁定樹視圖上的單個綁定以進行雙擊。單擊的默認綁定將選擇該項目,並且在雙擊綁定中,您可以向樹視圖請求所選項目。

如果將值與樹視圖項關聯,則可以獲取它們,以便不必將它們存儲在字典中。

下面是一個例子:

import tkinter as tk 
from tkinter import ttk 

def on_double_click(event): 
    item_id = event.widget.focus() 
    item = event.widget.item(item_id) 
    values = item['values'] 
    url = values[0] 
    print("the url is:", url) 

root = tk.Tk() 
t=ttk.Treeview(root) 
t.pack(fill="both", expand=True) 

t.bind("<Double-Button-1>", on_double_click) 

for x in range(10): 
    url = "http://example.com/%d" % x 
    text = "item %d" % x 
    t.insert("", x, text=text, values=[url]) 

root.mainloop() 
+0

謝謝,它的作品! –