微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python 3.8 Tk Tkinter ttk.Treeview 插入不会在框架中填充和显示

如何解决Python 3.8 Tk Tkinter ttk.Treeview 插入不会在框架中填充和显示

我不是菜鸟,但也不是很有经验。我正在使用 PyCharm 和 python 3.8。我正在尝试为我们的客户拼凑一个快速而肮脏的实用程序,以验证生产应用程序的输入文件。我听说过 python Tk,所以我在网上找到了一些代码,借用了它,并根据我的目的进行了修改代码示例是业余的,但是数据没有显示在 ttk.TreeView 对象中。如果在 populate_data 函数结束时停止 PyCharm 调试器,代码

for child in tree.get_children():
    print(tree.item(child)["values"])

在 PyCharm 评估器中显示 TreeView 对象有子项。

我不明白为什么 TreeView 子项没有正确显示。这是我的丑陋代码示例。提供函数只是为了使代码可执行。 提前致谢。

存在问题的部分在 ma​​in()populate_data 函数中。

from tkinter import ttk
from tkinter import messageBox
from tkinter import filedialog
from tkinter import simpledialog

from tkinter import *
import sys
import os

# designate default test environment
global execution_env
global db_server
execution_env = "Integration"
db_server = "autv-bitest01"

global header_list
header_list = ["Entity HCC ID","Entity Type","Issue Code","OE Flag","Effective Date","Override","Requestor","Date Dropped","Note"]
global base_window
base_window = None
global tree_frame
tree_frame = None
global tree
tree = None
global btn_env_text
btn_env_text = None
global btn_env
btn_env = None


global test_data
test_data = [
    ["A","val2","val3","x1","x2","x3","x3"],["B","asd2","asd3",["C","bbb3","bbb4",["D","ccc3","ccc4",["E","ddd3","ddd4",["F","Abb3","Abb4",["G","Bcc3","Bcc4",["H","Cdd3","Cdd4",["I","Dbb3","Dbb4",["J","Ecc3","Ecc4",["L","eee3","eee4","x3"]
]


def main():
    """
    MAIN code
    :return: NA
    """
    # MAIN CODE -- function main -- MAIN CODE
    global base_window
    global tree_frame
    global tree
    global btn_env
    global btn_env_text
    global execution_env
    global db_server

    if (len(db_server) == 0) and (len(execution_env) == 0):
        info_title = "OE Mass Order GUI"
        msg = "Execution environment is required"
        messageBox.showinfo(info_title,msg)
        sys.exit()

    base_window = Tk()
    base_window.geometry("1400x500")
    base_window.option_add('*background','yellow')
    base_window.title("OE Mass Order GUI")

    # label_text = StringVar()
    # label_text.set("ENVIRONMENT: " + execution_env + "   (" + db_server + ")")
    # label = Label(base_window,textvariable=label_text,relief=RAISED)
    # label.pack(padx=10,pady=20,side=TOP)

    btn_env_text = StringVar()
    btn_env_text = "Set environment: " + execution_env + "   (" + db_server + ")"
    btn_env = Button(base_window,text=btn_env_text,command=perform_choose,height=2)
    btn_env.pack(padx=10,side=TOP)

    tree_frame = Frame(base_window)
    tree_frame.pack(pady=20)

    tree = ttk.Treeview(base_window,columns=(1,2,3,4,5,6,7,8,9),height=10,show="headings")

    tree.heading(1,text="Entity HCC ID")
    tree.heading(2,text="Entity Type")
    tree.heading(3,text="Issue Code")
    tree.heading(4,text="OE Flag")
    tree.heading(5,text="Effective Date")
    tree.heading(6,text="Override")
    tree.heading(7,text="Requestor")
    tree.heading(8,text="Date Dropped")
    tree.heading(9,text="Note")

    tree.column(1,width=150)
    tree.column(2,width=150)
    tree.column(3,width=150)
    tree.column(4,width=150)
    tree.column(5,width=150)
    tree.column(6,width=150)
    tree.column(7,width=150)
    tree.column(8,width=150)

    y_scroll = ttk.Scrollbar(base_window,orient=VERTICAL,command=tree.yview)
    y_scroll.pack(side='right',fill='y')

    tree.configure(yscrollcommand=y_scroll.set)

    # wrap it up by loading data frame contents with test_data
    populate_data(test_data)   # populate tree data from test_data list

    btn_frame = Frame(base_window)

    btn_quit = Button(btn_frame,text="Quit",height=2,command=base_window.destroy)
    btn_quit.pack(padx=10,side=LEFT)

    btn_submit = Button(btn_frame,text="Submit")
    btn_submit["command"] = perform_submit
    btn_submit.pack(padx=10,side=LEFT)

    btn_append = Button(btn_frame,text="Append")
    btn_append["command"] = perform_append
    btn_append.pack(padx=10,side=LEFT)

    btn_import = Button(btn_frame,text="Import")
    btn_import["command"] = perform_import
    btn_import.pack(padx=10,side=LEFT)

    btn_clear = Button(btn_frame,text="Clear")
    btn_clear["command"] = perform_clear
    btn_clear.pack(padx=10,side=LEFT)

    btn_frame.pack(side=BottOM)

    base_window.mainloop()

    return


def populate_data(data_to_insert,debug_print=False):
    global tree

    my_data = data_to_insert
    if len(data_to_insert) > 0:
        for val in my_data:
            tree.insert(parent='',index='end',values=(val[0],val[1],val[2],val[3],val[4],val[5],val[6],val[7],val[8])
                        )

    # DEBUG BLOCK TO VIEW CONTENT OF treeview FRAME
    if debug_print:
        print("\n==========================")
        for child in tree.get_children():
            print(tree.item(child)["values"])
    return


def perform_choose():
    return


def perform_import():
    return


def perform_clear():
    return


def perform_append():
    return


def perform_submit():
    return


# --- THE REAL MAIN CODE ---
if __name__ == "__main__":

    main()

    # terminate
    sys.exit()

解决方法

您尚未调用 tree.pack()tree.grid(),因此不会显示 tree。另外我认为 treey_scroll 应该是 tree_frame 的孩子,而不是 base_window

...
# used tree_frame as parent instead of base_window
tree = ttk.Treeview(tree_frame,columns=(1,2,3,4,5,6,7,8,9),height=15,show="headings")
tree.pack(side="left",fill="both",expand=1)
...
# used tree_frame as parent instead of base_window
y_scroll = ttk.Scrollbar(tree_frame,orient=VERTICAL,command=tree.yview)
y_scroll.pack(side='right',fill='y')
...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。