当尝试在主 TFrame 网格上放置 2 个 TFrame 时,最终在两个 TFrame 之间出现了不应存在的间隙
这是代码:
import tkinter as tk
from tkinter import ttk
class App(tk.Tk):
def __init__(self, title, size):
super().__init__()
self.title(title)
self.geometry(f"{size[0]}x{size[1]}")
self.minsize(size[0], size[1])
s = ttk.Style()
s.configure("Header.TLabel", font=("Arial", 18, "bold"))
self.main = Main(self)
self.main.grid(row=0, column=0, sticky="nsew")
self.columnconfigure((0), weight=1)
self.rowconfigure((0), weight=1)
class Header(ttk.Frame):
def __init__(self, parent):
super().__init__(parent, padding="10 50 10 50")
self.create_widgets()
def create_widgets(self):
button = ttk.Button(self, text="Voltar")
button.grid(row=0, column=0, sticky="ew")
label = ttk.Label(
self, text="Cadastro de Pessoa", anchor="center", style="Header.TLabel"
)
label.grid(row=0, column=1, sticky="ew")
button = ttk.Button(self, text="Salvar")
button.grid(row=0, column=2, sticky="ew")
self.columnconfigure((0, 1, 2), weight=1)
self.rowconfigure((0), weight=1)
class Body(ttk.Frame):
def __init__(self, parent):
super().__init__(parent, padding="10 5 10 5")
self.create_widgets()
def create_widgets(self):
nome = ttk.Label(self, text="Nome: ", background="red")
nome.grid(row=0, column=0, sticky="nsew")
self.columnconfigure((0), weight=1)
self.rowconfigure((0), weight=1)
class Main(ttk.Frame):
def __init__(self, parent):
super().__init__(parent)
self.create_widgets()
def create_widgets(self):
self.header = Header(self)
self.header.grid(row=0, column=0, sticky="new")
self.body = Body(self)
self.body.grid(row=1, column=0, sticky="nsew")
self.columnconfigure((0), weight=1)
self.rowconfigure((0,1), weight=1)
app = App("Cadastro de Pessoa", (600, 600))
app.mainloop()
我已经尝试过仅输入 0 或仅输入 1 来更改行配置。
我已经尝试过更改 TFrame 的行编号,但没有帮助。
我已经尝试更改行配置,但它不起作用,如果有人可以帮助我,我将不胜感激。
这是因为您在
weight=1
框架内为第0行和第1行都设置了Main
。您只需将其设置为第 1 行即可获得所需的结果:
class Main(ttk.Frame):
...
def create_widgets(self):
...
self.rowconfigure(1, weight=1)