Различная привязка tkinter для любой строки ttk treeview

Я пишу простой скрипт, который создает ttk treeview (который действует как таблица), и когда вы дважды щелкаете по нему, он открывает файл (с путем, сохраненным в словаре). Открытие двойным щелчком возможно этим методом:

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

Однако это не дало мне идентификатор строки (хранящийся в столбце #0). С идентификатором я могу получить путь к файлу, сохраненному в словаре. Вот полный код 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)))

Спасибо!


person maicol07    schedule 05.10.2017    source источник
comment
вы переопределяете метод привязки к Treeview t, я дал ответ на ваш последний вопрос...   -  person PRMoureu    schedule 05.10.2017
comment
Возможный дубликат Tkinter/TTK - Предотвратить преобразование строки в ButtonPress   -  person PRMoureu    schedule 05.10.2017


Ответы (1)


Обычный способ сделать это — привязать одну привязку к древовидной структуре для двойного щелчка. Привязка по умолчанию для одиночного щелчка выберет элемент, а в привязке двойного щелчка вы можете запросить древовидную структуру для выбранного элемента.

Если вы связываете значения с элементом древовидной структуры, вы можете получить их, чтобы вам не приходилось хранить их в словаре.

Вот пример:

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()
person Bryan Oakley    schedule 05.10.2017