我希望能够使用嵌套框架,但是有一个奇怪的行为:当我输入height和width参数时,它们似乎不起作用。我使用.grid()是什么引起了问题?我使用ttk Frame,是否有一些我不知道的行为?
我查看了文档,但似乎无济于事。我尝试更改参数,但我也没有帮助。
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("Tk test")
root.geometry("800x800")
frame_1 = ttk.Frame(root, height=400, width=400, relief="sunken")\
frame_1.grid(row=0, column=0, rowspan=1, columnspan=1)
frame_2 = ttk.Frame(frame_1, height=200, width=200, relief="sunken")\
frame_2.grid(row=0, column=0, rowspan=1, columnspan=1, sticky="N, S, W, E")
label_1 = ttk.Label(frame_2, text="Text")
label_1.grid(row=0, column=0, sticky="S, W, N, E")
root.mainloop()
预期结果:另一个凹框内有一个凹框。嵌套框架内有一个名为“文本”的标签 实际结果:标签始终位于左上角,并且不想移动。
答案 0 :(得分:0)
由于网格管理器不知道主窗口上有多少行和多少列,因此它不会分配具有定义的高度和宽度的框架。
如果在每个框架中添加 padding ,您会看到Text小部件不在左上角。但是“文本”小部件将始终位于左上角,因为它一直位于第0行和第0列。
此外,使用rowconfigure和columnconfigure确保框架占用您在主窗口上指定的空间。
答案 1 :(得分:0)
您可以使用grid_columnconfigure()
和grid_rowconfigure
方法将网格上的单元格的最小大小设为documented here。
应用于您的代码(以及其他更正和改进):
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Tk test")
root.geometry("800x800")
frame_1 = ttk.Frame(root, height=400, width=400, relief="sunken")
frame_1.grid(row=0, column=0)
frame_2 = ttk.Frame(frame_1, height=200, width=200, relief="sunken")
frame_2.grid(row=0, column=0, sticky="NSWE")
frame_2.grid_rowconfigure(0, minsize=200)
frame_2.grid_columnconfigure(0, minsize=200)
label_1 = ttk.Label(frame_2, text="Text")
label_1.grid(row=0, column=0, sticky="NW")
root.mainloop()