Python 框架未展开

Python 框架未展开,python,tkinter,Python,Tkinter,也许这就是Tkinter的工作原理,但我不确定。目前,我的主窗口有三个相邻的框架。框架ContainerFrame是主框架,然后characterFrame和planetFrame放置在容器框架内。问题是,或者我希望发生的是,框架将填充窗口的一个设置区域,而不管它们是否是数据/小部件。 以下是我对它的设想 通常,您会使用一个框架来组织一个带有滚动条的小部件,但框架是不可滚动的。如果要滚动包含其他小部件的区域,通常需要使用画布 学习本指南: 背包可能很难使用,我发现克服这个问题的唯一方法就是继续尝

也许这就是Tkinter的工作原理,但我不确定。目前,我的主窗口有三个相邻的框架。框架ContainerFrame是主框架,然后characterFrame和planetFrame放置在容器框架内。问题是,或者我希望发生的是,框架将填充窗口的一个设置区域,而不管它们是否是数据/小部件。 以下是我对它的设想


通常,您会使用一个框架来组织一个带有滚动条的小部件,但框架是不可滚动的。如果要滚动包含其他小部件的区域,通常需要使用画布

学习本指南:

背包可能很难使用,我发现克服这个问题的唯一方法就是继续尝试。如果让不同的帧具有不同的bg颜色,通常更容易看到您在做什么。此外,我还随意更改了一些变量名,因为它们没有提示它们是什么或与其他名称太相似,例如
mainWindow
mainWindow

我在一些小部件中添加了一些填充,使其看起来更好

from tkinter import *

root = Tk()

def create_main_window():
    root.option_add('*tearOff', False)
    root.title("Interface")
    root.geometry('400x300+800+50')

    menubar = Menu(root)
    root.config(menu = menubar)
    File = Menu(menubar)
    About = Menu(menubar)
    menubar.add_cascade(menu = File, label = "File")
    menubar.add_cascade(menu = About, label = "About")

def create_container_frame():
    container = Frame(root, bg='tan')
    container.pack(fill="both", expand=True)

    scroller = Scrollbar(container, orient="vertical")
    scroller.pack(side="right", fill="y")

    characterFrame = Frame(container, bd=2, relief="sunken", bg='thistle')
    characterFrame.pack(side="left", fill='y', padx=(10,0), pady=10)

    character_button = Button(characterFrame, text ="Characters")
    character_button.pack(padx=10, pady=(10,0))
    Label(characterFrame, text ="Test1").pack()
    Label(characterFrame, text ="Test2").pack()

    planetFrame = Frame(container ,bd=2, relief="sunken", bg='khaki')
    planetFrame.pack(side="left", fill='both', expand=True, padx=10, pady=10)

    Label(planetFrame, text="Test1").pack(pady=(10,0))
    Label(planetFrame, text="Test2").pack()

create_main_window()
create_container_frame()

root.mainloop()

这就是你想要的布局吗?

你能更具体一点吗?你的问题提到了两帧,你的代码有三帧,图片的帧数未知。也许您可以按名称提及帧,或者为帧指定不同的颜色,或者确保所有帧的代码和图片具有相同的名称。@BryanOakley我有三个帧,一个作为根,characterFrame=Character Window,planetFrame=Planet Window。我已经实现了卷轴,但不是框架,菜单栏也不是框架。你的问题仍然不清楚。你说“三个框架并排布置”,但接着说你有一个有两个框架的容器。两个内框怎么可能“紧挨着”容器?在你的照片中,“行星窗”只是一个小矩形。它应该很小,还是应该填满右边?@BryanOakley,也许我解释错了,或者只是我缺乏知识,或者两者兼而有之。但我的印象是,我需要使用一个框架(containerFrame),然后在其中放置其他框架,以获得滚动功能以及更好的小部件放置。所以我在containerFrame中创建了characterFrame和planetFrame。我在这里做了一个新的模型。这个想法是让characterFrame在左边显示一个名字列表,然后是一个空白,然后planetFrame占据右边。如果maximized保持相同的格式,也是一样的。Ty正是我想要的。
from tkinter import *

root = Tk()

def create_main_window():
    root.option_add('*tearOff', False)
    root.title("Interface")
    root.geometry('400x300+800+50')

    menubar = Menu(root)
    root.config(menu = menubar)
    File = Menu(menubar)
    About = Menu(menubar)
    menubar.add_cascade(menu = File, label = "File")
    menubar.add_cascade(menu = About, label = "About")

def create_container_frame():
    container = Frame(root, bg='tan')
    container.pack(fill="both", expand=True)

    scroller = Scrollbar(container, orient="vertical")
    scroller.pack(side="right", fill="y")

    characterFrame = Frame(container, bd=2, relief="sunken", bg='thistle')
    characterFrame.pack(side="left", fill='y', padx=(10,0), pady=10)

    character_button = Button(characterFrame, text ="Characters")
    character_button.pack(padx=10, pady=(10,0))
    Label(characterFrame, text ="Test1").pack()
    Label(characterFrame, text ="Test2").pack()

    planetFrame = Frame(container ,bd=2, relief="sunken", bg='khaki')
    planetFrame.pack(side="left", fill='both', expand=True, padx=10, pady=10)

    Label(planetFrame, text="Test1").pack(pady=(10,0))
    Label(planetFrame, text="Test2").pack()

create_main_window()
create_container_frame()

root.mainloop()