2017-10-05 2 views
1

나는 테이블로 동작하는 ttk 트리 뷰를 만드는 간단한 스크립트를 작성하고 두 번 클릭하면 파일을 엽니 다. 사전). 더블 클릭 개방이 방법으로 가능하다 : ttk 트리 뷰 행에 대해 다른 tkinter 바인딩

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

그러나이 내게합니다 ( #0 컬럼에 저장) 행의 ID를 주었다하지 않습니다. 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

고마워, 작동! –

관련 문제