当前位置: 首页 > 知识库问答 >
问题:

python - 怎样解决Tkinter中Frame嵌套导致外部Frame大小失灵问题?

裴哲
2023-12-29

使用的是Python,tk,我如果在一个Frame中嵌套一个Frame,外面的Frame大小设置就失灵了。
image.png

import customtkinterif __name__ == "__main__":    app = customtkinter.CTk()    app.geometry("300x300")    frame = customtkinter.CTkFrame(app, width=280, height=280, fg_color="red")    frame_1 = customtkinter.CTkFrame(        frame, width=20, height=20, fg_color="green", corner_radius=5    )    frame_1.pack()    frame_2 = customtkinter.CTkFrame(        frame, width=20, height=20, fg_color="blue", corner_radius=5    )    frame_2.pack()    frame.pack()    app.mainloop()

本来是想做一组小Frame在里面,然后更随窗口大小变化的。
m*n行,最后一行可能不填满这个样子。

共有2个答案

梅安平
2023-12-29

这种问题搜得到吧, 在frame.pack()下加一行

frame.pack_propagate(0)
傅经业
2023-12-29

在Tkinter中,当你在一个Frame中嵌套另一个Frame时,可能会遇到一些布局问题。在你的代码中,外层Frame的大小设置没有生效,这是因为内部Frame(frame_1和frame_2)占据了整个外层Frame的空间。要解决这个问题,你需要确保内部Frame不会扩展外层Frame的大小。

解决这个问题的一种方法是使用pack方法或grid方法来管理Frame中的布局。这里是一个修改后的示例代码,它使用了pack方法来排列内部Frame,并且不改变外层Frame的大小:

import customtkinter as CTkif __name__ == "__main__":    app = CTk.CTk()    app.geometry("300x300")    frame = CTk.CTkFrame(app, width=280, height=280, fg_color="red")    frame_1 = CTk.CTkFrame(frame, width=20, height=20, fg_color="green", corner_radius=5)    frame_2 = CTk.CTkFrame(frame, width=20, height=20, fg_color="blue", corner_radius=5)    frame.pack(side="top", fill="both", expand=True)    frame_1.pack(side="top", fill="both", expand=True)    frame_2.pack(side="top", fill="both", expand=True)    app.mainloop()

在这个示例中,我使用了pack方法的side参数来指定Frame的放置位置,fill参数来指定Frame的填充方式,以及expand参数来控制Frame是否扩展以填充可用空间。通过设置这些参数,你可以控制内部Frame如何在窗口中布局,并避免改变外层Frame的大小。

 类似资料:
  • JVM不时会奇怪地崩溃。JVM崩溃日志中有问题的帧是libzip.so,error是sigsegv。这在Tomcat7和JDK7中发生 下面是堆栈跟踪以供参考: 堆栈:[0x00007F68B999C000,0x00007F68B9A9D000],SP=0x00007F68B9A99770, 可用空间=1013k本机帧:(J=编译的Java代码,J=解释的,VV=VM代码,C=本机代码)C[lib

  • 介绍 (Introduction) Frame类是一个带有边框和标题的顶级窗口。 它使用BorderLayout作为默认布局管理器。 类声明 以下是java.awt.Frame类的声明: public class Frame extends Window implements MenuContainer 字段 (Field) 以下是java.awt.Frame类的字段: sta

  • 介绍 (Introduction) JFrame类是java.awt.Frame的扩展版本,它增加了对JFC/Swing组件体系结构的支持。 Class 声明 (Class Declaration) 以下是javax.swing.JFrame类的声明 - public class JFrame extends Frame implements WindowConstants, A

  • Frame小部件对于以某种方式友好的方式分组和组织其他小部件的过程非常重要。 它就像一个容器,负责安排其他小部件的位置。 它使用屏幕中的矩形区域来组织布局并提供这些小部件的填充。 框架也可以用作实现复杂小部件的基础类。 语法 (Syntax) 以下是创建此小部件的简单语法 - w = Frame ( master, option, ... ) 参数 (Parameters) master - 这

  • No longer maintained Boilerplates can be a huge time sink to maintain and I've decieded to archivethis project. Thanks for your interest in my projects. Frame A user system API starter. Bring your own

  • 问题内容: 我是Intab的作者,这是一个Chrome扩展程序,可让您查看内联链接而不是新标签。幕后没有什么花哨的事情,它只是一个iframe,可加载用户单击的URL。 除了将X-Frame-Options标头设置为DENY或SAMEORIGIN的网站外,它的工作原理非常好。一些非常大的网站(例如Google和Facebook)都使用它,这给人带来了一些混乱的体验。 有什么办法可以解决这个问题?由