python ttk.treeview使用delete删除条目后怎么更新条目

使用tree.identy_row获取第一条类容,再使用treeview自带的delete方法删除,怎么让第二条获取的row为1,或者说是将所有条目清空后,在插入条目不会出现第一条获取的值不为1的方法

import tkinter as tk
from tkinter import messagebox
from tkinter import ttk
from tkinter import *

class productdata(object):
def __init__(self):
self.root = tk.Tk() #初始化
self.root.title('数据方舟') #修改窗体名称
self.root.resizable(width=False,height=False) #窗体界面宽高可调
self.root.geometry('900x500') #窗体默认大小
self.canvas = tk.Canvas(self.root,width='1200',height='1200')
self.image_file = tk.PhotoImage(file = "beijing.gif")
self.image = self.canvas.create_image(0,0,anchor='nw',image=self.image_file)
self.canvas.pack(side='top')
#定义一个变量监控删除行数
self.delhang=0

#添加一个表格
columns = ("字段类型", "字段长度", "小数位数", "是否唯一", "字段名称")
self.treeview = ttk.Treeview(self.root, height=18, show="headings", columns=columns)
# 表示列,不显示
self.treeview.column("字段类型", width=100, anchor='center')
self.treeview.column("字段长度", width=100, anchor='center')
self.treeview.column("小数位数", width=100, anchor='center')
self.treeview.column("是否唯一", width=100, anchor='center')
self.treeview.column("字段名称", width=100, anchor='center')
# 显示表头
self.treeview.heading("字段类型", text="字段类型")
self.treeview.heading("字段长度", text="字段长度")
self.treeview.heading("小数位数", text="小数位数")
self.treeview.heading("是否唯一", text="是否唯一")
self.treeview.heading("字段名称", text="字段名称")
# 写入数据
self.type = ['letter']
self.long = ['10']
self.decimal = ['0']
self.only = ['是']
self.name = ['资源ID']
for i in range(min(len(self.type), len(self.long), len(self.decimal), len(self.only), len(self.name))):
self.treeview.insert('', i, values=(self.type[i], self.long[i], self.decimal[i], self.only[i], self.name[i]))
# 双击左键进入编辑
self.treeview.bind('<Double-1>', self.set_cell_value)

#添加一个'添加字段'按钮
self.add_field_button = ttk.Button(self.root,text='添加字段',width=10, command=self.newrow)
# 添加一个'删除字段'按钮
self.del_field_button = ttk.Button(self.root,text='删除字段',width=10, command=self.delrow)
#添加一个'清空字段'按钮
self.delall_field_button = ttk.Button(self.root,text='清空字段',width=10,command=self.delall)

def buju(self):
#添加按钮
self.add_field_button.place(x=780,y=40)
#删除按钮
self.del_field_button.place(x=780,y=80)
#清空按钮
self.delall_field_button.place(x=780,y=120)
#表格布局
self.treeview.place(x=0, y=2, width=750, height=200)

def set_cell_value(self,event):
for item in self.treeview.selection():
# item = I001
item_text = self.treeview.item(item, "values")
# print(item_text[0:2])  # 输出所选行的值
column = self.treeview.identify_column(event.x)  # 列
row = self.treeview.identify_row(event.y)  # 行
cn = int(str(column).replace('#', ''))
rn = int(str(row).replace('I', ''))-self.delhang
entryedit = Text(self.root, width=10, height=1)
entryedit.place(x=20 + (cn - 1) * 150, y=6 + rn * 20)

def saveedit():
self.treeview.set(item, column=column, value=entryedit.get(0.0, "end"))
entryedit.destroy()
okb.destroy()

okb = ttk.Button(self.root, text='OK', width=4, command=saveedit)
okb.place(x=90 + (cn - 1) * 150, y=2 + rn * 20)

def newrow(self):
self.type.append('输入字段类型')
self.long.append('输入字段长度')
self.decimal.append('输入小数位数')
self.only.append('是否唯一')
self.name.append('请输入字段长度')
self.treeview.insert('', len(self.type) - 1, values=(self.type[len(self.type)-1],
self.long[len(self.type)-1],
self.decimal[len(self.type)-1],
self.only[len(self.type)-1],
self.name[len(self.type)-1]))
self.treeview.update()

def delrow(self):
selected_items = self.treeview.selection()
for item in selected_items:
self.treeview.delete(item)
self.delhang +=1

def delall(self):
all_items = self.treeview.get_children()
for item in all_items:
self.treeview.delete(item)
self.delhang =0

def main():
#初始化对象
p = productdata()
#进行布局
p.buju()
tk.mainloop()

if __name__=="__main__":
main()



温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-03-19

python

from Tkinter import Tk, Button
import ttk


root = Tk()

tree = ttk.Treeview(root)

tree["columns"]=("one","two")
tree.column("one", width=100 )
tree.column("two", width=100)
tree.heading("one", text="coulmn A")
tree.heading("two", text="column B")

tree.insert("" , 0,    text="Line 1", values=("1A","1b"))

id2 = tree.insert("", 1, "dir2", text="Dir 2")
tree.insert(id2, "end", "dir 2", text="sub dir 2", values=("2A","2B"))

##alternatively:
tree.insert("", 3, "dir3", text="Dir 3")
tree.insert("dir3", 3, text=" sub dir 3",values=("3A"," 3B"))

def edit():
    x = tree.get_children()
    for item in x: ## Changing all children from root item
        tree.item(item, text="blub", values=("foo", "bar"))

def delete():
    selected_item = tree.selection()[0] ## get selected item
    tree.delete(selected_item)

tree.pack()
button_del = Button(root, text="del", command=delete)
button_del.pack()
button_del = Button(root, text="edit", command=edit)
button_del.pack()

root.mainloop()

追问

你好,我是想把treeview的所有孩子清除并重新插入数据,这样删除再次插入数据时会出现条目混乱的现象

本回答被网友采纳