获取嵌套框架以填充已填充的父单元格内的剩余窗口空间

任何人都可以帮助我让我的嵌套框架在其父单元格内填充剩余的窗口空间吗?我创建了应用程序窗口,给它一个容器,根据有多少页面给容器提供 2 行和动态列。我的容器是父容器。通过为第二行赋予权重 1 并使第一列扩展到所有可用列,我已经能够用父单元格填充窗口。然后我将嵌套框架(这是页面)插入第二行,在第一行中每个页面的按钮下方。但是,即使我删除了所有网格用法,我似乎也遇到了包和网格层次结构的问题。这就像 tk.Tk() 在调用时由网格自动控制。

第 41 行似乎是我可以在页面上进行包装填充和扩展的地方。但它会导致层次结构错误,即使在删除所有网格使用并用包替换必要的网格之后。通过使用网格,它在没有这条线的情况下运行良好。只是无法填充/扩展

import tkinter as tk
from tkinter import font as tkfont


class Application(tk.Tk):

    def __init__(self, title, page_list):
        tk.Tk.__init__(self)

        self.minsize(500, 500)
        self.maxsize(500, 500)
        self.update_idletasks()
        self.title_font = tkfont.Font(family="Helvetica", size=10, weight="bold", slant="italic")

        self.title(title)

#    Create the main container. Row 1 holds page buttons. Row 2 is for the page frame.
        container = tk.Frame(self)
        container.configure(bg="red")
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(1, weight=1)
        container.grid_columnconfigure(len(page_list), weight=1)

#    Begin making the pages and put them in a dictionary to grab by name.
        self.pages = {}
        self.p_names = page_list
        for P in self.p_names:
            page_name = P.__name__
            page = P(parent=container, controller=self, title=page_name.strip("Page"))
            self.pages[page_name] = page
#    Make the buttons from the page list provided
        self.create_buttons(container, self)

        self.show_page(str(self.p_names[0].__name__), self.currentPage)

    def show_page(self, page_name, button):
        self.currentPage.configure(relief="raised", bg="red", fg="black")
        page = self.pages[page_name]

#    Put the page in row 1 below the buttons, in the top left. Expand it so it fills the remainder of the cell/window
        #page.pack(side="top", fill="both", expand="true") #This line will cause error when uncommented.
        page.grid(row=1, columnspan=len(self.pages), sticky="nw")

        for p in self.pages:
            if p != page_name:
                self.pages[p].grid_forget()
        button.configure(relief="sunken", bg="black", fg="white")
        self.currentPage = button

    def create_buttons(self, s, controller):
        pgs = len(self.p_names)*3
#    need to figure out how to accurately get window width and use it properly for button width division
        pages = {}

        for i,p in enumerate(self.p_names):
            pages[i] = tk.Button(s, text=p.__name__.strip("Page"), fg="Black", bg="red",
                                 width=(self.winfo_reqwidth() // pgs) + 1,
                                 command=lambda i=i, p=p: controller.show_page(p.__name__, pages[i]))
            pages[i].grid(row=0, column=i)
        self.currentPage = pages[0]


class NewPage(tk.Frame):
    def __init__(self, parent, controller, title):
        self.title = title
        tk.Frame.__init__(self, parent, bg="Black")
        self.controller = controller

#    Create Page Title Label
        pageTitle = tk.Label(self, text=self.title, font=controller.title_font, bg="Black", fg="white")
#    Attempt to fill cell that page is in
        pageTitle.pack(fill="both", expand="true")
        pageTitle.grid_columnconfigure(1, weight=1)
        pageTitle.grid_rowconfigure(1, weight=1)
#    Pad the page title
        pageTitle.grid(row=0, column=0, pady=10, padx=10, sticky="nsew")


        #extraLabel = tk.Label(self, text="test", bg="blue")
        #extraLabel.grid(row=1, column=1, pady=5, padx=5, sticky="nsew")


class CharacterPage(NewPage):
    def __init__(self, parent, controller, title):
        super().__init__(parent, controller, title)


class OptionsPage(NewPage):
    def __init__(self, parent, controller, title):
        super().__init__(parent, controller, title)


class InventoryPage(NewPage):
    def __init__(self, parent, controller, title):
        super().__init__(parent, controller, title)


class RandomPage(NewPage):
    def __init__(self, parent, controller, title):
        super().__init__(parent, controller, title)


def main():
    app = Application("Game Title Here", [CharacterPage, InventoryPage, OptionsPage])
    app.mainloop()


main()

应该发生的是页面,因为它的背景是黑色的,应该以黑色覆盖单元格/窗口的其余部分。着色是让我在视觉上看到它正在工作,而不仅仅是使背景变黑。该页面最终将填充其他元素。

我是否缺少有关包装或网格的信息?我对使用它们很陌生。大约只有一个星期或两个星期。在嵌套框架填充中找不到任何内容。

无花果梁

您不能在同一个容器中使用 pack 和 grid。

尝试给页面一个不同的背景颜色,这样你就可以知道什么时候看到它:

class NewPage(tk.Frame):
    def __init__(self, parent, controller, title):
        self.title = title
        tk.Frame.__init__(self, parent, bg="tan")    # bg='tan'

你会看到页面位于左上角。在中间或页面是标签pageTitle

使用sticky="nwse"扩展页面,以填补细胞。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CSS表格单元格填充了firefox中的剩余空间

来自分类Dev

Tkinter框架无法填充剩余空间

来自分类Dev

Tkinter框架无法填充剩余空间

来自分类Dev

VBA-Excel-用嵌套的IF填充单元格

来自分类Dev

从单元格填充列

来自分类Dev

Javascript 单元格填充

来自分类Dev

自动填充单元格

来自分类Dev

如何使表内的div填充剩余空间

来自分类Dev

集合视图单元格内按钮的填充宽度

来自分类Dev

在不同的 collectionView 单元格内填充不同的 tableView

来自分类Dev

输入填充剩余空间

来自分类Dev

div填充剩余空间

来自分类Dev

在单列中填充范围内的单元格,但仅填充下一个空白单元格

来自分类Dev

填充DataFrame中的单元格

来自分类Dev

用于单元格填充的CSS

来自分类Dev

如何使文本填充表格单元格?

来自分类Dev

SQlite填充空单元格

来自分类Dev

每个单元格定义的填充矩阵

来自分类Dev

从NSDictionary键填充单元格

来自分类Dev

在某些单元格上方填充值

来自分类Dev

填充单元格时隐藏行

来自分类Dev

从阵列快速填充Excel单元格

来自分类Dev

在特定的单元格中填充颜色

来自分类Dev

使用数组填充相邻单元格

来自分类Dev

Migradoc实际表格单元格填充

来自分类Dev

CSS 表格单元格填充混乱

来自分类Dev

GridBagLayout-如何使此单元格填充其下方的空间?

来自分类Dev

用空格填充单词以填充单元格

来自分类Dev

如果语句说单元格在未填充时被填充