将树视图中的选定行打印并插入到tkinter条目小部件

时间:2018-02-12 19:23:49

标签: python tkinter treeview

我有以下代码可以在treeview窗口小部件中打印并插入选定的entry行,但我对如何操作有疑问。我List profile没有显示在treeview中正确填写内容,我希望年份显示在列指定下与月份相同。

当我选择行时,它会将('end',)打印到我的终端并在我的end小部件中插入entry而不是所选的。

from tkinter import *
from tkinter import ttk


profile = [("2012", "JANUARY"),
           ("2013", "FEBRUARY"),
           ("2014", "MARCH"),
           ("2015", "APRIL"),
           ("2016", "MAY")
           ]


def content(event):
    print(tree.selection()) # this will print the row inserted

    for nm in tree.selection():
        e1.insert(END, nm)
        e2.insert(END, nm)


root = Tk()

tree = ttk.Treeview(root, columns=("columns1","columns2" ), show="headings", 
selectmode="browse")
tree.heading("#1", text="YEAR")
tree.heading("#2", text="MONTH")
tree.insert("", 1, END, values=profile)

tree.bind("<<TreeviewSelect>>", content)
tree.pack()

e1 = Entry(root)
e1.pack()
e2 = Entry(root)
e2.pack()

root.mainloop()

1 个答案:

答案 0 :(得分:0)

首先,您需要遍历profile列表以填充树视图:

for values in profile:
    tree.insert("", END, values=values)

你在做什么:

tree.insert("", 1, END, values=profile)

创建了一行,项目名称为“end”,并且值为profile的前两个元组。

我想您要在e1中插入所选行的年份,在e2中插入月份。但是,tree.selection()会为您提供所选项目的名称,而不是值,但您可以使用year, month = tree.item(nm, 'values')获取这些名称。所以content函数变为

def content(event):
    print(tree.selection()) # this will print the names of the selected rows

    for nm in tree.selection():
        year, month = tree.item(nm, 'values')
        e1.insert(END, year)
        e2.insert(END, month)