2017-10-05 8 views
1

J'écris un script simple qui crée une arborescence ttk (qui agit comme une table) et, lorsque vous double-cliquez dessus, ouvre un fichier (avec le chemin enregistré dans le dictionnaire). Double ouverture de clic est possible par cette méthode:Différence tkinter différente pour n'importe quelle ligne ttk treeview

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

Cependant, cela ne m'a donné l'ID de la ligne (stockée dans la colonne #0). Avec l'ID je peux obtenir le chemin du fichier enregistré dans un dictionnaire. Voici le code complet 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))) 

Merci!

+0

vous surchargez la méthode liaison au Treeview 't', j'ai fourni une réponse à votre dernière question ... – PRMoureu

+0

double possible de [Tkinter/TTK - Prévenir chaîne à ButtonPress conversion] (https://stackoverflow.com/questions/46506048/tkinter-ttk-prevent-string-to-buttonpress-conversion) – PRMoureu

Répondre

0

La méthode normale consiste à lier une seule liaison sur l'arborescence pour un double-clic. La liaison par défaut pour un clic unique sélectionne l'élément, et dans votre liaison double-clic, vous pouvez demander à l'arborescence pour l'élément sélectionné.

Si vous associez des valeurs à l'élément treeview, vous pouvez les récupérer pour ne pas devoir les stocker dans un dictionnaire.

Voici un exemple:

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

Merci, ça marche !! –