Tkinter - 如何创建自定义 Tkinter Frame 对象?我试过了,但没用
Tkinter - How to create a custom Tkinter Frame object? I tried but it doesn't work
我试图创建一些定制的 tkinter 对象来更轻松地构建我的 GUI,但不幸的是我做不到。例如,如果我想要一个对象来标识放置在另一个框架内的框架怎么办?为此,我写了它:
主要代码(文件名:“test.py”):
import tkinter as tk
from tkinter import ttk
import ttk_plus as ttkp # my custom library
parent=tk.Tk()
parent.geometry("686x424+370+100")
parent.title("Test")
parent.configure(background="#f0f0f0")
parent.minsize(686, 424)
MyFrame=ttkp.Frame(parent) # my custom object
MyFrame.pack(padx=(5,5), pady=(5,5))
parent.mainloop()
库(文件名:“ttk_plus.py”):
class Frame(tk.Frame):
def __init__(self, container):
super().__init__(container)
self.container=container
# definisco il frame principale:
self.Frame1=tk.Frame(self.container, background="white")
# definisco il frame secondario:
self.Frame2=tk.Frame(self.Frame1, background="white", highlightbackground="red", highlightthickness=1)
self.Frame2.pack(padx=(5, 5), pady=(5, 5), fill=tk.BOTH)
如果我 运行 “test.py”,软件启动没有任何问题,但我在主 window 中看不到我的项目。我哪里错了?
在您的自定义框架中,Frame1
是 Frame2
的父级。您打包了 Frame2
但没有打包它的父级,因此它根本不在您的 window.
中
修复
尝试打包您的 Frame1
:
self.Frame1=tk.Frame(self.container, background="white")
self.Frame1.pack(fill="both", expand=True)
结果将是:
为了检查其是否正常工作,请尝试向 Frame2
添加一个示例按钮
如果您要创建自定义框架,则在此框架中创建的每个小部件都必须是框架的后代,而不是容器。否则,Frame
将以意想不到的方式影响其 parent。
self.Frame1=tk.Frame(self, background="white")
您还需要确保在此内部框架上调用了一些几何管理器(pack
、place
、grid
)。否则,此框架和其中的任何小部件将不可见。
由于是容器中唯一的直接child,所以pack
最简单:
self.Frame1.pack(fill="both", expand=True)
最后,由于目前您只是在创建框架,因此您可能想要为框架指定一个大小,或者使用几何管理器属性使其填充 window。
MyFrame.pack(padx=(5,5), pady=(5,5), fill="both", expand=True)
我试图创建一些定制的 tkinter 对象来更轻松地构建我的 GUI,但不幸的是我做不到。例如,如果我想要一个对象来标识放置在另一个框架内的框架怎么办?为此,我写了它:
主要代码(文件名:“test.py”):
import tkinter as tk
from tkinter import ttk
import ttk_plus as ttkp # my custom library
parent=tk.Tk()
parent.geometry("686x424+370+100")
parent.title("Test")
parent.configure(background="#f0f0f0")
parent.minsize(686, 424)
MyFrame=ttkp.Frame(parent) # my custom object
MyFrame.pack(padx=(5,5), pady=(5,5))
parent.mainloop()
库(文件名:“ttk_plus.py”):
class Frame(tk.Frame):
def __init__(self, container):
super().__init__(container)
self.container=container
# definisco il frame principale:
self.Frame1=tk.Frame(self.container, background="white")
# definisco il frame secondario:
self.Frame2=tk.Frame(self.Frame1, background="white", highlightbackground="red", highlightthickness=1)
self.Frame2.pack(padx=(5, 5), pady=(5, 5), fill=tk.BOTH)
如果我 运行 “test.py”,软件启动没有任何问题,但我在主 window 中看不到我的项目。我哪里错了?
在您的自定义框架中,Frame1
是 Frame2
的父级。您打包了 Frame2
但没有打包它的父级,因此它根本不在您的 window.
修复
尝试打包您的 Frame1
:
self.Frame1=tk.Frame(self.container, background="white")
self.Frame1.pack(fill="both", expand=True)
结果将是:
为了检查其是否正常工作,请尝试向 Frame2
添加一个示例按钮
如果您要创建自定义框架,则在此框架中创建的每个小部件都必须是框架的后代,而不是容器。否则,Frame
将以意想不到的方式影响其 parent。
self.Frame1=tk.Frame(self, background="white")
您还需要确保在此内部框架上调用了一些几何管理器(pack
、place
、grid
)。否则,此框架和其中的任何小部件将不可见。
由于是容器中唯一的直接child,所以pack
最简单:
self.Frame1.pack(fill="both", expand=True)
最后,由于目前您只是在创建框架,因此您可能想要为框架指定一个大小,或者使用几何管理器属性使其填充 window。
MyFrame.pack(padx=(5,5), pady=(5,5), fill="both", expand=True)