Обновление ткинтера Treeview - PullRequest
0 голосов
/ 25 ноября 2018

Я написал код для отображения таблицы, используя tkinter ttk Treeview.Затем я выбрал один из предметов на столе и внес изменения в его предмет.Итак, я обновил таблицу, удалив все ее элементы и вставив новые.Но почему элементы все еще ссылаются на элементы старой таблицы, добавленные новыми?

import tkinter as tk
from tkinter import ttk
win=tk.Tk()
def testcommand():

    for i in tabel.get_children():
        print(i)

    for i in tabel.get_children():
        tabel.delete(i)
    for i in tes:
        tabel.insert('', 'end', text=str(i))

    for i in tabel.get_children():
        print(i)
tabel=ttk.Treeview(win,selectmode='browse')
tabel.heading('#0',text="COBA")
tes=[1,2,3,4]
for i in tes:
    tabel.insert('','end',text=str(i))
tabel.pack()
ttk.Button(win,text='Test',command=testcommand).pack()

win.mainloop()

В первом выражении «print» я получил («I001», «I002», «I003», «I004»).'), но после того, как я обновил свое древовидное представление, элемент продолжил («I005», «I006», «I007», «I008»).

Почему «метод удаления» из древовидного представления несбросить элемент обратно на «I001»?Кто-нибудь может мне помочь, пожалуйста?

1 Ответ

0 голосов
/ 05 августа 2019

Имена Tkinter по умолчанию для элементов древовидной структуры: «I001», «I002», ... и счетчик, используемый для создания имен, не сбрасывается, когда все элементы удаляются из древовидной структуры.

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

tree.insert('', 'end', <name>, **kw)

Адаптируя код ОП, он дает

import tkinter as tk
from tkinter import ttk
win=tk.Tk()
def testcommand():

    for i in tabel.get_children():
        print(i)

    for i in tabel.get_children():
        tabel.delete(i)
    for i in tes:
        tabel.insert('', 'end', 'item%i' % i, text=str(i)) # explicitly name the item

    for i in tabel.get_children():
        print(i)
tabel=ttk.Treeview(win,selectmode='browse')
tabel.heading('#0',text="COBA")
tes=[1,2,3,4]
for i in tes:
    tabel.insert('','end', 'item%i' % i, text=str(i))  # explicitly name the item
tabel.pack()
ttk.Button(win,text='Test',command=testcommand).pack()

win.mainloop()

И вывод при нажатии на кнопку теста равен

item1
item2
item3
item4
item1
item2
item3
item4

, как и ожидалось в OP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...