簡體   English   中英

無法在tkinter上使用網格調整樹視圖大小

[英]Can't resize treeview with grid on tkinter

我無法使用網格布局調整tkinter上的treeview小部件。 我嘗試使用columnconfigurerowconfigure weight但它不起作用。 當我運行它時,當我拉伸它所在的窗口時,樹視圖不會填充空白區域。

def __init__(self, master):
    self.master = master
    tk.Frame.__init__(self, self.master)
    self.create_widgets()

def create_widgets(self):
    # button to request data
    self.request_button = tk.Button(root, text="Send", command=self.req_client)
    self.request_button.grid(row=0, column=0, rowspan=2, columnspan=3)

    # timer label
    self.timer_label = tk.Label(root, text="Timer Settings")
    self.timer_label.grid(row=0, column=3, columnspan=2, pady=3, sticky=tk.NSEW)

    # create tk variable
    self.timervar = tk.StringVar(root)

    # dropdown dictionary
    self.timerDict = {"-", "5 minutes", "10 minutes", "15 minutes"}
    self.timervar.set("-")  # <-- set the default value

    # timer dropdown menu
    self.timer_option = tk.OptionMenu(root, self.timervar, *self.timerDict, command=self.req_timer)
    self.timer_option.grid(row=1, column=3, columnspan=2, padx=3, pady=3, sticky=tk.NSEW)

    # scroll bar for the terminal outputs
    self.terminal_scrollbar = tk.Scrollbar(root)
    self.terminal_scrollbar.grid(row=2, column=5, sticky=tk.NS)

    # terminal output
    self.terminal_tree = ttk.Treeview(root)
    self.terminal_tree.grid(row=2, column=0, columnspan=5, sticky=tk.NSEW)
    self.terminal_tree.configure(yscrollcommand=self.terminal_scrollbar.set)
    self.terminal_tree.columnconfigure(0, weight=1)
    self.terminal_tree.rowconfigure(0, weight=1)
    self.terminal_tree["columns"] = ("1")
    self.terminal_tree['show'] = 'headings'
    self.terminal_tree.column("1", width=100, anchor='c')
    self.terminal_tree.heading("1", text="Example")

首先:如果你使用Frame來創建類,那么你應該使用這個框架( self )作為小部件的父級(而不是使用root

之后 ...

第二:你必須調整Frameself )的大小,所以它將使用完整的窗口

self.pack(fill='both', expand=True)

因為TreeviewFrame所以你必須使用帶有Frame columnconfigure

self.columnconfigure(0, weight=1) # column with treeview
self.rowconfigure(2, weight=1) # row with treeview  

工作實例。 我評論command=運行它。

(順便說一下:我在Frame使用bg="red"來查看Frame是否正在調整大小)

import tkinter as tk
from tkinter import ttk

class Main(tk.Frame):

    def __init__(self, master):
        self.master = master
        tk.Frame.__init__(self, self.master) # , bg="red")

        self.pack(fill='both', expand=True)

        self.create_widgets()

    def create_widgets(self):
        # button to request data
        self.request_button = tk.Button(self, text="Send") #, command=self.req_client)
        self.request_button.grid(row=0, column=0, rowspan=2, columnspan=3)

        # timer label
        self.timer_label = tk.Label(self, text="Timer Settings")
        self.timer_label.grid(row=0, column=3, columnspan=2, pady=3, sticky=tk.NSEW)

        # create tk variable
        self.timervar = tk.StringVar(self)

        # dropdown dictionary
        self.timerDict = {"-", "5 minutes", "10 minutes", "15 minutes"}
        self.timervar.set("-")  # <-- set the default value

        # timer dropdown menu
        self.timer_option = tk.OptionMenu(self, self.timervar, *self.timerDict) #, command=self.req_timer)
        self.timer_option.grid(row=1, column=3, columnspan=2, padx=3, pady=3, sticky=tk.NSEW)

        # scroll bar for the terminal outputs
        self.terminal_scrollbar = tk.Scrollbar(self)
        self.terminal_scrollbar.grid(row=2, column=5, sticky=tk.NS)

        # terminal output
        self.terminal_tree = ttk.Treeview(self)
        self.terminal_tree.grid(row=2, column=0, columnspan=5, sticky=tk.NSEW)
        self.terminal_tree.configure(yscrollcommand=self.terminal_scrollbar.set)
        self.terminal_tree["columns"] = ("1")
        self.terminal_tree['show'] = 'headings'
        self.terminal_tree.column("1", width=100, anchor='c')
        self.terminal_tree.heading("1", text="Example")

        self.columnconfigure(0, weight=1) # column with treeview
        self.rowconfigure(2, weight=1) # row with treeview        

root = tk.Tk()
Main(root)
root.mainloop()

您可能必須在第一行內使用框架以更好地組織按鈕和選項菜單。

在此輸入圖像描述


編輯:更改某些grid()選項和更改rowconfigure()

在此輸入圖像描述

import tkinter as tk
from tkinter import ttk

class Main(tk.Frame):

    def __init__(self, master):
        self.master = master
        tk.Frame.__init__(self, self.master) # , bg="red")

        self.pack(fill='both', expand=True)

        self.create_widgets()

    def create_widgets(self):
        # button to request data
        self.request_button = tk.Button(self, text="Send") #, command=self.req_client)
        self.request_button.grid(row=0, column=0, rowspan=2)

        # timer label
        self.timer_label = tk.Label(self, text="Timer Settings")
        self.timer_label.grid(row=0, column=1, pady=3, sticky=tk.NSEW)

        # create tk variable
        self.timervar = tk.StringVar(self)

        # dropdown dictionary
        self.timerDict = {"-", "5 minutes", "10 minutes", "15 minutes"}
        self.timervar.set("-")  # <-- set the default value

        # timer dropdown menu
        self.timer_option = tk.OptionMenu(self, self.timervar, *self.timerDict) #, command=self.req_timer)
        self.timer_option.grid(row=1, column=1, padx=3, pady=3, sticky=tk.NSEW)

        # scroll bar for the terminal outputs
        self.terminal_scrollbar = tk.Scrollbar(self)
        self.terminal_scrollbar.grid(row=2, column=5, sticky=tk.NS)

        # terminal output
        self.terminal_tree = ttk.Treeview(self)
        self.terminal_tree.grid(row=2, column=0, columnspan=3, sticky=tk.NSEW)
        self.terminal_tree.configure(yscrollcommand=self.terminal_scrollbar.set)
        self.terminal_tree["columns"] = ("1")
        self.terminal_tree['show'] = 'headings'
        self.terminal_tree.column("1", width=100, anchor='c')
        self.terminal_tree.heading("1", text="Example")

        self.columnconfigure(2, weight=1) # column with treeview
        self.rowconfigure(2, weight=1) # row with treeview        

root = tk.Tk()
Main(root)
root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM