如何使用循环将列添加到TTK Treeview?

我正尝试使用TTK Treeview对象显示需要不同列/列名称的各种数据,出于某些原因,在遍历我创建的列标题列表时,无论第一个标题还是最后一个标题,数字中的2个会起作用。

我试图添加一个sleep节来创建标题之前的列,我试图完全删除列表,只是试图在一个循环中创建4个标题,结果仍然相同。

treeview对象将列存储在元组tree2["columns"]中,我在最后打印该列以验证是否存储了所有标题引用,请​​参见下面的示例代码。

import tkinter as tk
from tkinter import ttk

headings = ["Heading0","Heading1","Heading2","Heading3"]

root = tk.Tk()
root.title("Add headings")

frame1 = tk.Frame(root)
frame1.pack()

tree = ttk.Treeview(frame1)
tree["columns"] = ("C1","C2")
tree.column("#0",width=500,minwidth=400,stretch=tk.NO)
tree.column("C1",width=200,minwidth=200,stretch=tk.NO)
tree.column("C2",stretch=tk.NO)
tree.heading("#0",text="Name",anchor=tk.W)
tree.heading("C1",text="Type",anchor=tk.W)
tree.heading("C2",text="Index",anchor=tk.W)
print(tree["columns"])

t = {}

for i in range(5):
    t[i] = tree.insert("",i,text="Example " + str(i),values=("val1","val2"))
tree.pack(expand=True,fill="both")

def create():
    for i,val in enumerate(headings):
        if i == 0:
            tree2.column("#0",stretch=tk.NO)
            tree2.heading("#0",text=val,anchor=tk.W)
        elif i == 1:
            tree2["columns"] = tree2["columns"] + ("C1")
            tree2.column("C1",width=800,stretch=tk.NO)
            tree2.heading("C1",text=val[1],anchor=tk.W)
        else:
            tree2["columns"] = tree2["columns"] + ("C" + str(i),)
            tree2.column("C" + str(i),stretch=tk.NO)
            tree2.heading("C" + str(i),anchor=tk.W)
        print(val)
    print(tree2["columns"])


btn1 = tk.Button(frame1,text="Add",command=create)
btn1.pack(side="top")

tree2 = ttk.Treeview(frame1)


tree2.pack(expand=True,fill="both")

root.mainloop()

这是一个例子:

如何使用循环将列添加到TTK Treeview?

这里的问题adding multiple columns to a treeview展示了获取正确列数的问题,但是在标题下方没有给出下面的明确答案,以确保它们被显示。

wuyunlong_ 回答:如何使用循环将列添加到TTK Treeview?

这是我在评论中提到的示例。可以将其设置为更好的格式,但我只是将其添加到您的代码中以显示其工作原理。此外,还有一个错误,您在每次函数调用时都会不断地在元组上构建。

Sub cellAddresses()

    With Range("A1:D6")

        Set c = .Find("Item A",LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                MsgBox c.Address
                Set c = .FindNext(c)
                Loop While c.Address <> firstAddress
        End If
    End With

End Sub
本文链接:https://www.f2er.com/2717986.html

大家都在问