python ttk.treeview使用delete删除条目后怎么更新条目
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()
参考技术A
python
from Tkinter import Tk, Buttonimport 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的所有孩子清除并重新插入数据,这样删除再次插入数据时会出现条目混乱的现象
如何在 Treeview 中编辑标题的样式(Python ttk)
【中文标题】如何在 Treeview 中编辑标题的样式(Python ttk)【英文标题】:How to edit the style of a heading in Treeview (Python ttk) 【发布时间】:2015-11-10 04:08:06 【问题描述】:我正在尝试使用 ttk.Treeview 制作一个可排序的表(根据 Does tkinter have a table widget? 和 https://www.daniweb.com/software-development/python/threads/350266/creating-table-in-python)。
让它工作起来很容易,但我在样式方面遇到了一些问题。 Treeview 标题的默认样式是白色背景上的黑色文本,这很好。但是,在我使用的代码中:
ttk.Style().configure(".", font=('Helvetica', 8), foreground="white")
格式化我的 GUI。这种总体风格也会影响 Treeview 小部件的标题。因为默认标题背景是白色的,所以我看不到文本(除非我将鼠标悬停在标题上,它会变成浅蓝色)。
通常,我会使用标签覆盖小部件的样式以更改背景或前景,但我终生无法弄清楚如何调整 Treeview 标题! ttk.Treeview(...) 不接受任何标签,并且 ttk.Style().configure("Treeview", ...) 没有效果。使用 widget.insert(...) 时,只有 Treeview 项目似乎接受标签。
这让我感到困惑,因为总体 ttk.Style().configure(".",...) 确实会影响 Treeview 标题,因此应该可以对它们应用标签.
有人知道如何更改 Treeview 标题的样式吗?
以下是一个最低限度的工作示例。请注意,该标签适用于项目,但不适用于标题,Treeview 样式无效,并且“。”风格确实有影响。我在 Windows 7 上使用 Python 2.7,以防万一。
from Tkinter import *
import ttk
header = ['car', 'repair']
data = [
('Hyundai', 'brakes') ,
('Honda', 'light') ,
('Lexus', 'battery') ,
('Benz', 'wiper') ,
('Ford', 'tire')]
root = Tk()
frame = ttk.Frame(root)
frame.pack()
table = ttk.Treeview(frame, columns=header, show="headings")
table.pack()
## table.tag_configure('items', foreground='blue')
## ttk.Style().configure("Treeview", background='red', foreground='yellow')
## ttk.Style().configure(".", font=('Helvetica', 8), foreground="white")
for col in header:
table.heading(col, text=col.title(), command=lambda c=col: sortby(table, c, 0))
for item in data:
table.insert('', 'end', values=item, tags=('items',))
def sortby(tree, col, descending):
"""sort tree contents when a column header is clicked on"""
# grab values to sort
data = [(tree.set(child, col), child) \
for child in tree.get_children('')]
# if the data to be sorted is numeric change to float
#data = change_numeric(data)
# now sort the data in place
data.sort(reverse=descending)
for ix, item in enumerate(data):
tree.move(item[1], '', ix)
# switch the heading so it will sort in the opposite direction
tree.heading(col, command=lambda col=col: sortby(tree, col, \
int(not descending)))
root.mainloop()
【问题讨论】:
【参考方案1】:这在我所在的地方有效 -
style = ttk.Style()
style.configure(".", font=('Helvetica', 8), foreground="white")
style.configure("Treeview", foreground='red')
style.configure("Treeview.Heading", foreground='green') #<----
http://www.tkdocs.com/tutorial/styles.html
【讨论】:
你是英雄!谢谢:)【参考方案2】:您可以使用默认命名字体“TkHeadingFont”更改 Treeview 标题中使用的字体。
例如:
font.nametofont('TkHeadingFont').configure(size = 15)
【讨论】:
以上是关于python ttk.treeview使用delete删除条目后怎么更新条目的主要内容,如果未能解决你的问题,请参考以下文章
python ttk.treeview使用delete删除条目后怎么更新条目
Python如何改变tkinter.ttk.Treeview表格组件的每行的行高?