Проблемы с размещением фреймов с помощью python tkinter (фрейм внутри фрейма делает родительский фрейм невидимым) - PullRequest
3 голосов
/ 06 апреля 2019

Я использую python для создания небольшого приложения (для личного использования / обучения), и у меня возникают проблемы с пониманием того, как работает фрейм-модуль от tkinter. Все, что я до сих пор делал, это пытался разместить цветные квадраты, чтобы визуально «отобразить» окно, но у меня уже есть проблемы.

  • Я установил зеленую рамку "основного" окна (размер 600 * 400, можно изменять размер)
  • рамка контейнера желтого цвета (600 * 400, чтобы она охватывала все окно и чтобы мы могли видеть зеленый фон из главного окна при изменении размера окна)
  • и третий кадр синего цвета, содержащий желтый (450 * 400)

Проблема в том, что всякий раз, когда я пытаюсь «напечатать» синюю рамку, желтая - нет.

import tkinter

class leftFrame(tkinter.Frame):
    def __init__(self, parent):
        self.frame = tkinter.Frame(parent, width=450, height=400, bg="blue")
        self.parent = parent
        self.initialize()

    def initialize(self):
        self.frame.grid()
        #if I comment this previous line, the yellow frame will be printed
        #pass


class mainFrame(tkinter.Frame):
    def __init__(self, master=None):
        self.frame = tkinter.Frame(master, width=600, height=400, bg="yellow")
        self.master = master
        self.initialize()

    def initialize(self):
        self.frame.grid()
        self.left = leftFrame(self.frame)


root = tkinter.Tk()
root.geometry("600x400")
root.wm_title("Tkinter test")
root.configure(bg="green")
#root.resizable(False, False)

app = mainFrame(root)

root.mainloop()

Я использовал классы для обработки своих «объектов макета», так как это казалось более чистым способом, но, поскольку я новичок в программировании на Python и объектах, есть вероятность, что я сделал что-то не так, если кто-то захочет объяснить мне, почему этот кусок кода не работает, это было бы очень полезно! Спасибо;)

1 Ответ

1 голос
/ 06 апреля 2019

Фон вашего корня закрывается двумя вставляемыми рамками.
Я предлагаю следующее:

-> метка-заполнитель была вставлена ​​для смещения внутренних рамок, так что вы можете видетьцвет фона корня.

import tkinter as tk


class InnerFrame(tk.Frame):
    """A tk.Frame to be inserted in a container
    """ 
    def __init__(self, master, **kwargs):
        super().__init__(master, **kwargs)
        self.master = master


class MainFrame(tk.Frame):
    """Container for two InnerFrame
    """
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.left_frame = InnerFrame(self, width=450, height=400, bg="blue")
        self.left_frame.grid(row=0, column=0)
        self.right_frame = InnerFrame(self, width=450, height=400, bg="green")
        self.right_frame.grid(row=0, column=1)


class App(tk.Tk):   # NOTE: not a tk.Frame
    """A tk.root that contains the entire GUI app
    """
    def __init__(self, title, color, width, height):
        super().__init__()
        self.title(title)
        self.configure(bg=color)
        self.geometry(f'{width}x{height}')

        self.placeholder_label = tk.Label(self, text='placeholder')
        self.placeholder_label.grid(row=1, column=0)

        self.mainframe = MainFrame(self)
        self.mainframe.grid()


# create and launch
App(title='Tkinter test', color='yellow', width=900, height=400).mainloop()

аспект в OSX:

enter image description here

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