[英]TreeView width unexpectedly changes
我有一个包含 Treeview 和 Frame-embedded-in-a-Canvas 的框架。 Treeview 在一个
'#0'<\/code>列中显示来自 MongoDB 的文档,每次用户选择我从文档字段生成的任何文档时,Frame-embedded-in-a-Canvas 中的 Checkbuttons 列表。
我遇到的问题是 Treeview 宽度不是恒定的,但我无法理解它为什么会发生变化以及它何时发生。 每次生成新的 Checkbuttons 列表后,我的 Treeview 宽度都会增长 30 像素,而无需考虑 Treeview 和 Frame-embedded-in-a-Canvas 预计将分别位于父级网格列 0 和 1 中且权重为零的事实.
这是 GIF 的链接<\/a>,展示了它的外观。 在下面你可以找到我关于这些小部件的代码。
请告诉我在哪里寻找这个问题的原因。
def treeview_reload():
dt_tv.delete(*dt_tv.get_children())
dt_tv.insert('', 'end', '_b_', text='biomes')
dt_tv.insert('', 'end', '_z_', text='zones')
dt_tv.insert('', 'end', '_p_', text='points')
dt_tv.insert('', 'end', '_m_', text='biomaterials')
dt_tv.insert('', 'end', '_c_', text='characters')
def tv_sel_handler(event):
try:
sel_iid = event.widget.selection()[0]
except IndexError:
sel_iid = ''
try:
generate_model(MAP[sel_iid])
except KeyError:
pass
def generate_model(document, new_list=True, row=0, indent=0):
if new_list:
for c in list(dt_model.children.values()):
c.destroy()
i = row
for field in document.keys():
if type(document[field]) is list:
cb = ttk.Label(dt_model, text=indent*2*' '+field)
cb.grid(row=i, column=0, sticky='w', padx=30, pady=4)
cb['font'] = ("Noto Mono", 13)
pass
elif type(document[field]) is dict:
cb = ttk.Checkbutton(dt_model, text=indent*2*' '+field)
cb.grid(row=i, column=0, sticky='w')
ttk.Style().configure('Mono.TCheckbutton', font=("Noto Mono", 13))
cb['style'] = 'Mono.TCheckbutton'
i = generate_model(document[field], False, i+1, indent+1)
else:
cb = ttk.Checkbutton(dt_model, text=indent*2*' '+field)
cb.grid(row=i, column=0, sticky='w')
ttk.Style().configure('Mono.TCheckbutton', font=("Noto Mono", 13))
cb['style'] = 'Mono.TCheckbutton'
i += 1
if i > 17:
vsb = ttk.Scrollbar(pdb_data, orient=VERTICAL, command=dt_canv.yview)
dt_canv['yscrollcommand'] = vsb.set
vsb.grid(row=0, column=2, sticky='nsw')
dt_model.bind('<Configure>',
lambda event, canvas=dt_canv:
canvas.configure(scrollregion=canvas.bbox("all")))
dt_model.bind('<Enter>',
lambda event:
dt_canv.bind_all("<MouseWheel>",
lambda event:
dt_canv.yview_scroll(int(-1*(event.delta/120)), "units")))
dt_model.bind('<Leave>',
lambda event: dt_canv.unbind_all("<MouseWheel>"))
return i
# ...
# ___ frame for the data
pdb_data = ttk.Frame(page_db, width=1250, height=450)
pdb_data.grid(row=6, column=0, columnspan=2, sticky='nsew', pady=24)
# ____ categorized documents list
dt_tv = ttk.Treeview(pdb_data, selectmode='browse', show=('tree',))
dt_tv.column('#0', width=250)
dt_tv.grid(row=0, column=0, sticky='nsw')
dt_tv.bind('<<TreeviewSelect>>', tv_sel_handler)
treeview_reload()
# ____ auxiliary canvas
dt_canv = Canvas(pdb_data, borderwidth=0, width=300)
dt_canv.grid(row=0, column=1, sticky='nsw', padx=10)
# _____ frame-embedded-in-a-canvas for checkbuttons list
dt_model = ttk.Frame(dt_canv, width=400, height=450)
dt_canv.create_window((0,0), window=dt_model, anchor='nw')
pdb_data.rowconfigure(0, weight=1)
root.mainloop()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.