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 中看不到我的项目。我哪里错了?

在您的自定义框架中,Frame1Frame2 的父级。您打包了 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")

您还需要确保在此内部框架上调用了一些几何管理器(packplacegrid)。否则,此框架和其中的任何小部件将不可见。

由于是容器中唯一的直接child,所以pack最简单:

self.Frame1.pack(fill="both", expand=True)

最后,由于目前您只是在创建框架,因此您可能想要为框架指定一个大小,或者使用几何管理器属性使其填充 window。

MyFrame.pack(padx=(5,5), pady=(5,5), fill="both", expand=True)