Python3.8 Tk Tkinter ttk.Treeview插入不填充并显示在框架中
我不是新手,但也没有丰富的经验。我正在使用PyCharm和python 3.8。我试图拼凑出一个快速而肮脏的实用程序,让我们的客户验证生产应用程序的输入文件。我听说过python Tk,所以我在web上找到了一些代码,借用了它,并根据我的目的进行了修改。代码示例是业余的,但数据不显示在ttk.TreeView对象中。如果在populate_data函数的末尾停止PyCharm调试器,则代码段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
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您应该将更改放在问题中,或者将其作为另一个答案发布。