2017-10-05 8 views
1

私は、テーブルとして動作するttkツリービューを作成する簡単なスクリプトを作成しています。ダブルクリックするとファイルが開きます(パスは辞書)。ダブルクリックして開くには、この方法によって可能にされています。しかし、これは私に(#0列に格納されている)の行のIDを与えていない任意のttkツリービュー行のtkinterバインディングが異なります

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

。 IDを使用して、辞書に保存されたファイルのパスを取得できます。

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))) 

ありがとう: ここでいっぱいTreeviewコードです!

+0

あなたがツリービュー 'T'に結合するメソッドをオーバーライドしている、私は...あなたの最後の質問に答えを提供[Tkinterを/ TTKの – PRMoureu

+0

が重複する可能性 - 防止の文字列に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

ありがとう、それは動作します! –

関連する問題