Я использую python для создания небольшого приложения (для личного использования/обучения), и у меня возникают проблемы с пониманием того, как работает модуль фрейма из tkinter. Все, что я сделал до сих пор, это попытался разместить цветные квадраты, чтобы визуально «отобразить» окно, но у меня уже возникли проблемы.
Проблема в том, что всякий раз, когда я пытаюсь «напечатать» синюю рамку, желтая не печатается.
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()
Я использовал классы для обработки своих «объектов макета», поскольку это казалось более чистым способом сделать это, но, поскольку я новичок в программировании на питоне и объектах, есть вероятность, что я сделал что-то не так, если кто-то хочет объяснить мне, почему это немного кода не работает, это было бы большим подспорьем! Спасибо ;)






Фон вашего корня оказывается закрытым двумя кадрами, которые вы вставляете.
Я предлагаю следующее:
-> была вставлена метка-заполнитель для смещения внутренних рамок, чтобы вы могли видеть цвет фона корня.
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()
Большое спасибо, это было очень полезно :)