Кадр в кадре в TKinter неожиданные результаты - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь поместить 2 кадра в кадр, который, в свою очередь, помещается в окно TKinter. Я ожидаю, что приведенный ниже код создаст 4 одинаковых кадра в окне, а затем поместит 2 одинаковых кадра в первый кадр. Я получаю четыре равных кадра с двумя верхними кадрами, каждый из которых содержит один кадр.

Я звоню кадру, в который я sh помещаю два меньших / равных кадра, но мне кажется, что я получаю ссылку на окно. Из того, что я прочитал, я считаю, что кадры могут быть размещены в рамках.

from tkinter import *

class list_frame (Frame):
    def __init__(self,the_window):
        super().__init__()
        self["height"]=50
        self["width"]=200
        self["relief"]=RAISED
        self["bd"]=8
        self["bg"]="red"

class little_frame (Frame):
    def __init__(self,the_frame):
        super().__init__()
        self["height"]=20
        self["width"]=50
        self["relief"]=RAISED
        self["bd"]=8
        self["bg"]="black"

my_window = Tk()
my_window.geometry("400x300+0+0")

frame_a = list_frame(my_window)
frame_a.grid(row=0, column=0)
frame_b = list_frame(my_window)
frame_b.grid(row=0, column=1)
frame_c = list_frame(my_window)
frame_c.grid(row=1, column=0)
frame_d = list_frame(my_window)
frame_d.grid(row=1, column=1)

frame_e = little_frame(frame_a)
frame_e.grid(row=0, column=0)
frame_f = little_frame(frame_a)
frame_f.grid(row=0, column=1)

my_window.mainloop()

Я уверен, что это глупая простая ошибка, но я ее не вижу, и повторные сессии не заставляют меня прыгать.

1 Ответ

1 голос
/ 16 января 2020

Вы не передаете родительский объект суперклассу __init__. Из-за этого все кадры являются дочерними элементами окна root.

Вам необходимо сделать следующее:

class list_frame (Frame):
    def __init__(self,the_window):
        super().__init__(the_window)
        ...

class little_frame (Frame):
    def __init__(self,the_frame):
        super().__init__(the_frame)
        ...

Поскольку кадру не важно, содержит ли содержащий виджет виджет это окно, рамка или любой другой виджет, вероятно, было бы лучше переименовать the_window и the_frame в master или parent

class list_frame (Frame):
    def __init__(self, master):
        super().__init__(master)
        ...

class little_frame (Frame):
    def __init__(self, master):
        super().__init__(master)
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...