Python3.8 Tk Tkinter ttk.Treeview插入不填充并显示在框架中

Python3.8 Tk Tkinter ttk.Treeview插入不填充并显示在框架中,python,tkinter,treeview,tk,ttk,Python,Tkinter,Treeview,Tk,Ttk,我不是新手,但也没有丰富的经验。我正在使用PyCharm和python 3.8。我试图拼凑出一个快速而肮脏的实用程序,让我们的客户验证生产应用程序的输入文件。我听说过python Tk,所以我在web上找到了一些代码,借用了它,并根据我的目的进行了修改。代码示例是业余的,但数据不显示在ttk.TreeView对象中。如果在populate_data函数的末尾停止PyCharm调试器,则代码段 for child in tree.get_children(): print(tree.ite

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

for child in tree.get_children():
    print(tree.item(child)["values"])
在PyCharm中,计算器显示TreeView对象具有子对象

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

存在问题的部分位于main()填充数据功能中

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", "x1", "x2", "x3"],
    ["B", "asd2", "asd3", "x1", "x2", "x3", "x1", "x2", "x3"],
    ["C", "bbb3", "bbb4", "x1", "x2", "x3", "x1", "x2", "x3"],
    ["D", "ccc3", "ccc4", "x1", "x2", "x3", "x1", "x2", "x3"],
    ["E", "ddd3", "ddd4", "x1", "x2", "x3", "x1", "x2", "x3"],
    ["F", "Abb3", "Abb4", "x1", "x2", "x3", "x1", "x2", "x3"],
    ["G", "Bcc3", "Bcc4", "x1", "x2", "x3", "x1", "x2", "x3"],
    ["H", "Cdd3", "Cdd4", "x1", "x2", "x3", "x1", "x2", "x3"],
    ["I", "Dbb3", "Dbb4", "x1", "x2", "x3", "x1", "x2", "x3"],
    ["J", "Ecc3", "Ecc4", "x1", "x2", "x3", "x1", "x2", "x3"],
    ["L", "eee3", "eee4", "x1", "x2", "x3", "x1", "x2", "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, pady=20, 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)
    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, pady=20, side=LEFT)

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

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

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

    btn_clear = Button(btn_frame, height=2, text="Clear")
    btn_clear["command"] = perform_clear
    btn_clear.pack(padx=10, pady=20, 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
。我还认为
tree
y\u scroll
应该是
tree\u frame
的子对象,而不是
base\u window

。。。
#使用树结构作为父结构,而不是基本窗口
tree=ttk.Treeview(树框架,列=(1,2,3,4,5,6,7,8,9),高度=15,show=“标题”)
tree.pack(side=“left”,fill=“both”,expand=1)
...
#使用树结构作为父结构,而不是基本窗口
y_scroll=ttk.Scrollbar(树框架,方向=垂直,命令=树.yview)
y_滚动包装(侧边为右,填充为y)
...

这是太多的代码了。Stackoverflow不是为免费调试服务而设计的。请试着把代码压缩成a。谢谢你,acw1668!这是我需要的答案,但找不到。这是我的最终代码版本。@user1313358您应该将更改放在问题中,或者将其作为另一个答案发布。