Tkinter - CheckboxTreeview 高度和水平滚动

问题描述 投票:0回答:1

我对底部的python代码有两个疑问:

  1. 我希望 CheckboxTreeview 小部件覆盖尽可能多的可用高度。如果用户调整窗口大小,小部件中应该有更多行。我知道高度参数,但这总是给我固定的行数。如何根据我的需要修改代码?
  2. 我希望 x 和 y 两列具有代码中写入的固定宽度。如果我调整窗口大小,这些列的宽度也会被修改。此外,如果第一列中的文本太长,x滚动条是否有效并且可以使用?

.

import tkinter as tk
from tkinter import ttk
from ttkwidgets import CheckboxTreeview

class App():
    def __init__(self, master):  
        self.master = master
        self.master.geometry('300x400')
        self.master.columnconfigure(0, weight=1)
        self.tree = CheckboxTreeview(self.master)
        xsb = ttk.Scrollbar(self.master, orient='horizontal', command=self.tree.xview)
        ysb = ttk.Scrollbar(self.master, orient='vertical', command=self.tree.yview)
        self.tree.configure(yscroll=ysb.set)
        self.tree['columns']=('x', 'y')
        self.tree.column('x', anchor='e', width=40)
        self.tree.column('y', width=40)
        self.tree.heading('#0', text='abc', anchor='w')
        self.tree.heading('x', text='x', anchor='w')
        self.tree.heading('y', text='y', anchor='w')
        self.tree.grid(row=0, column=0)
        ysb.grid(row=0, column=1, sticky='ns')
        xsb.grid(row=1, column=0, sticky='ew')
        self.master.frame = tk.Frame(self.master, highlightbackground="black", highlightthickness=2)#, background='#ff0')
        self.master.frame.grid(row=4, column=0, columnspan=2, sticky='w')
        tk.Label(self.master.frame, text='TEXT', font=tk.font.Font(size=16, weight='bold')).grid(row=0, column=0)
        self.tree.insert('', 'end', text='node 1', values=('x1', 'y1'), open=True)
        self.tree.insert('', 'end', text='node 2 - this is a very long text which should be scrollable', values=('x2', 'y2'), open=True)

root = tk.Tk()
app = App(root)
app.master.mainloop()
python tkinter treeview
1个回答
0
投票

对于第1项,您需要调用

self.master.rowconfigure(0, weight=1)
并在
sticky="nsew"
中设置
self.tree.grid(...)

对于第 2 项,将

stretch=0
添加到
self.tree.column('x', ...)
self.tree.column('y', ...)

更新代码:

import tkinter as tk
from tkinter import ttk
from ttkwidgets import CheckboxTreeview

class App():
    def __init__(self, master):
        self.master = master
        self.master.geometry('300x400')
        self.master.rowconfigure(0, weight=1)  # added
        self.master.columnconfigure(0, weight=1)
        self.tree = CheckboxTreeview(self.master)
        xsb = ttk.Scrollbar(self.master, orient='horizontal', command=self.tree.xview)
        ysb = ttk.Scrollbar(self.master, orient='vertical', command=self.tree.yview)
        self.tree.configure(yscroll=ysb.set)
        self.tree['columns']=('x', 'y')
        self.tree.column('x', anchor='e', width=40, stretch=0) # added stretch=0
        self.tree.column('y', width=40, stretch=0) # added stretch=0
        self.tree.heading('#0', text='abc', anchor='w')
        self.tree.heading('x', text='x', anchor='w')
        self.tree.heading('y', text='y', anchor='w')
        self.tree.grid(row=0, column=0, sticky="nsew") # added sticky="nsew"
        ysb.grid(row=0, column=1, sticky='ns')
        xsb.grid(row=1, column=0, sticky='ew')
        self.master.frame = tk.Frame(self.master, highlightbackground="black", highlightthickness=2)#, background='#ff0')
        self.master.frame.grid(row=4, column=0, columnspan=2, sticky='w')
        tk.Label(self.master.frame, text='TEXT', font=tk.font.Font(size=16, weight='bold')).grid(row=0, column=0)
        self.tree.insert('', 'end', text='node 1', values=('x1', 'y1'), open=True)
        self.tree.insert('', 'end', text='node 2 - this is a very long text which should be scrollable', values=('x2', 'y2'), open=True)

root = tk.Tk()
app = App(root)
app.master.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.