Оказывается, ваша проблема проста в размере.LabelFrame
в основном сидит с нулевым размером, потому что вы ничего не добавили к кадру.Поэтому, чтобы исправить это, добавьте ширину и высоту, чтобы изменить размер LabelFrame
и проблема штанги решена.
Как только вы начнете заполнять эти LabelFrame
виджетами, вам больше не понадобится форматирование размера.
import tkinter as tk
from tkinter import ttk
class MainApplication(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
notebook = ttk.Notebook(parent)
notebook.add(Typ1(notebook), text='TAB1')
notebook.add(Typ2(notebook), text='TAB2')
notebook.pack()
class Typ1(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
shell_frame=tk.LabelFrame(self, text="Sample Label Frame", padx=5, pady=5, width=200, height=200)
shell_frame.grid(row=0,column=0,padx=5,pady=5)
class Typ2(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
shell_frame=tk.LabelFrame(self, text="Sample Label Frame", padx=5,pady=5, width=200, height=200)
shell_frame.grid(row=0,column=0,padx=5,pady=5)
if __name__ == "__main__":
root = tk.Tk()
MainApplication(root).pack(side="top", fill="both", expand=True)
root.mainloop()
Результаты:

Вы также можете просто наследовать от LabelFrame
вместо Frame
в своем классе, чтобы получить те же результатыwith less.
Пример:
import tkinter as tk
from tkinter import ttk
class MainApplication(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
notebook = ttk.Notebook(parent)
notebook.add(Typ1(notebook), text='TAB1')
notebook.add(Typ2(notebook), text='TAB2')
notebook.pack()
class Typ1(tk.LabelFrame):
def __init__(self, parent, *args, **kwargs):
tk.LabelFrame.__init__(self, parent, text="Sample Label Frame", padx=5, pady=5, width=200, height=200)
self.grid(row=0,column=0,padx=5,pady=5)
class Typ2(tk.LabelFrame):
def __init__(self, parent, *args, **kwargs):
tk.LabelFrame.__init__(self, parent, text="Sample Label Frame", padx=5, pady=5, width=200, height=200)
self.grid(row=0,column=0,padx=5,pady=5)
if __name__ == "__main__":
root = tk.Tk()
MainApplication(root).pack(side="top", fill="both", expand=True)
root.mainloop()
Чтобы ответить на ваши комментарии ниже, вы должны интегрировать обмен фреймами со страницей входа в систему.
import tkinter as tk
from tkinter import ttk
class App(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self._frame = None
self.switch_frame(LoginPage)
def switch_frame(self, frame_class):
"""Destroys current frame and replaces it with a new one."""
new_frame = frame_class(self)
if self._frame is not None:
self._frame.destroy()
self._frame = new_frame
self._frame.grid(row=0, column=0)
class LoginPage(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master = master
tk.Label(self, text="Username: ").grid(row=0, column=0)
tk.Label(self, text="Password: ").grid(row=1, column=0)
self.un_entry = tk.Entry(self)
self.un_entry.grid(row=0, column=1)
self.pw_entry = tk.Entry(self)
self.pw_entry.grid(row=1, column=1)
self.pw_entry.bind("<Return>", self.check_login)
tk.Button(self, text="Login", command=self.check_login).grid(row=2, column=0)
def check_login(self, event=None):
if self.un_entry.get() == "Mike" and self.pw_entry.get() == "pass":
self.master.switch_frame(MainApplication)
class MainApplication(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
notebook = ttk.Notebook(parent)
notebook.add(Typ1(notebook), text='TAB1')
notebook.add(Typ2(notebook), text='TAB2')
notebook.grid(row=0, column=0)
class Typ1(tk.LabelFrame):
def __init__(self, parent, *args, **kwargs):
tk.LabelFrame.__init__(self, parent, text="Sample Label Frame", padx=5, pady=5, width=200, height=200)
self.grid(row=0,column=0,padx=5,pady=5)
class Typ2(tk.LabelFrame):
def __init__(self, parent, *args, **kwargs):
tk.LabelFrame.__init__(self, parent, text="Sample Label Frame", padx=5, pady=5, width=200, height=200)
self.grid(row=0,column=0,padx=5,pady=5)
if __name__ == "__main__":
App().mainloop()