【问题标题】:Printing and inserting selected row in treeview into tkinter entry widget将树视图中的选定行打印并插入到 tkinter 条目小部件中
【发布时间】:2018-02-12 19:23:48
【问题描述】:

我有以下代码可以打印并在entry 小部件中插入选定的treeview 行,但在如何执行此操作时遇到了挑战。我的List profile 无法在treeview 中正确显示内容,我希望年份出现在指定为与月份相同的列下。

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

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()

【问题讨论】:

    标签: python tkinter treeview


    【解决方案1】:

    首先,您需要遍历您的 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)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多