gpt4 book ai didi

python - 如何让 Treeview 列适合其所在的框架

转载 作者:行者123 更新时间:2023-12-01 00:35:51 33 4
gpt4 key购买 nike

动态更改 TreeView 数据时,我希望行扩展到 TreeView 框架的大小。目前,如果我使 GUI 全屏显示并重新填充数据,它仅使用可用屏幕尺寸的一小部分,即列不会调整大小或拉伸(stretch)以填充屏幕宽度(我不太关心行填充)。我在下面制作了一个最小的工作示例:


import tkinter as tk
from tkinter import ttk
import random

class App():

def __init__(self):

self.root = tk.Tk()

self.frame = tk.Frame(self.root)
self.frame.pack(expand=True, fill=tk.BOTH)

self.tree = ttk.Treeview(self.frame, show="headings")
self.tree.pack(expand=True, fill=tk.BOTH)

self.button = ttk.Button(self.root, text="Fill", command=self.fill)
self.button.pack(side=tk.BOTTOM,expand=True,fill=tk.X)

self.root.mainloop()

def fill(self):

if self.has_data():
self.tree.delete(*self.tree.get_children())

i = random.randrange(1,10)
self.tree["columns"]=tuple([str(i) for i in range(i)])

for col in self.tree['columns']:
self.tree.heading(col, text="Column {}".format(col), anchor=tk.CENTER)
self.tree.column(col, anchor=tk.CENTER)

j = random.randrange(10)

for j in range(j):

self.tree.insert("", "end", values = tuple([k for k in range(i)]))

def has_data(self):

has_tree = self.tree.get_children()

return True if has_tree else False


App()

请注意,调整 GUI 的大小时我会自动调整列的大小。

最佳答案

问题是列是用初始大小创建的(我认为默认为 200 像素),并且只有在创建后调整 TreeView 大小时才会拉伸(stretch)。因此,您必须手动设置列宽以占据整个可用空间。为此,您可以使用 TreeView 的 column() 方法的 width 参数:

self.tree.column(col, width=col_width)

其中 col_width 是总宽度除以列数。将此代码合并到 fill() 函数中可以得到

def fill(self):

if self.has_data():
self.tree.delete(*self.tree.get_children())

i = random.randrange(1,10)
self.tree["columns"]=tuple([str(i) for i in range(i)])

col_width = self.tree.winfo_width() // i # compute the width of one column

for col in self.tree['columns']:
self.tree.heading(col, text="Column {}".format(col), anchor=tk.CENTER)
self.tree.column(col, anchor=tk.CENTER, width=col_width) # set column width

j = random.randrange(10)

for j in range(j):

self.tree.insert("", "end", values = tuple([k for k in range(i)]))

关于python - 如何让 Treeview 列适合其所在的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57772458/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com