Рамка не расширяется - PullRequest
0 голосов
/ 03 октября 2018

Может быть, именно так работает Tkinter, но я не уверен.В настоящее время у меня есть главное окно с тремя рамками, расположенными рядом друг с другом.Frame ContainerFrame является мастером, затем CharacterFrame и planetFrame помещаются внутри ContainerFrame.Проблема заключается в том, что кадры должны заполнять заданную область окна независимо от того, являются ли они данными / виджетами в них.Вот как я это представляю https://imgur.com/OjdKFh4

from tkinter import *
from tkinter import ttk

MainWindow = Tk()
def mainWindow():
  MainWindow.option_add('*tearOff', False)
  MainWindow.title("Interface")
  MainWindow.geometry('800x600')
  menubar = Menu(MainWindow)
  MainWindow.config(menu = menubar)
  File = Menu(menubar)
  About = Menu(menubar)
  menubar.add_cascade(menu = File, label = "File")
  menubar.add_cascade(menu = About, label = "About")

def frameContainer():
  containerFrame = Frame(MainWindow)
  containerFrame.pack(anchor = "nw", side = "left", fill = "both", expand = False)
  scroller = Scrollbar(orient = "vertical")

  characterFrame = Frame(containerFrame, borderwidth="2", relief="sunken")
  characterFrame.pack(anchor = "nw", side = "left", expand = True)

  planetFrame =  Frame(containerFrame ,borderwidth="2", relief="sunken")
  planetFrame.pack(anchor = "nw", side = "right", expand = True)

  scroller = Scrollbar(orient = "vertical")
  scroller.pack(anchor = "e", side = "right", fill = "y", expand = False)

  characterLable = Button(characterFrame, text ="Characters")
  characterLable.pack()
  Label(characterFrame, text ="Test1").pack()
  Label(characterFrame, text ="Test2").pack()

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


mainWindow()
frameContainer()
MainWindow.mainloop()

1 Ответ

0 голосов
/ 04 октября 2018

Обычно вы используете рамку для организации виджета с полосой прокрутки, но рамка не прокручивается.Если вы хотите прокрутить область, содержащую другие виджеты, обычно нужно использовать холст.

Изучите это руководство: Шаблоны полос прокрутки Tkinter

Пакет может быть сложным в использовании, и единственный способ преодолеть это - продолжать попытки.Обычно легче увидеть, что вы делаете, если вы позволите различным кадрам иметь разные цвета 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()

Это макет, к которому вы стремитесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...