Tkinter框架问题:调整大小不起作用

时间:2019-04-10 11:19:26

标签: python tkinter

我希望能够使用嵌套框架,但是有一个奇怪的行为:当我输入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()

预期结果:另一个凹框内有一个凹框。嵌套框架内有一个名为“文本”的标签 实际结果:标签始终位于左上角,并且不想移动。

2 个答案:

答案 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()