【问题标题】:Tkinter frame problem : resizing does not workTkinter 框架问题:调整大小不起作用
【发布时间】:2019-04-10 11:19:25
【问题描述】:

我希望能够使用嵌套框架,但有一个奇怪的行为:当我输入高度和宽度参数时,它们似乎不起作用。我使用 .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()

预期结果:另一个凹陷框架内有一个凹陷框架。在嵌套框架内有一个名为“文本”的标签 实际结果:标签一直在左上角,不想动。

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    您可以使用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()
    

    【讨论】:

    • 非常感谢!我不需要在框架中使用 rowspan 和 columnspan 吗?
    • Jonathcraft:我不这么认为——至少现在还没有。跨度选项用于使单个单元格占据通常为多行或多列保留的空间,但您仅在两个框架内使用/定义单行和列。
    • ... 例如,如果您在frame_2 中添加了现有的单个标签之外的内容,则可能需要使用它。
    【解决方案2】:

    由于网格管理器不知道主窗口上有多少行和列,它不会分配具有定义的高度和宽度的框架。

    如果您在每个框架中添加 padding,您将看到 Text 小部件不在左上角。但是 Text 小部件将始终位于左上角,因为它已放置在第 0 行和第 0 列。

    此外,使用 rowconfigure 和 columnconfigure 确保框架占用您在主窗口中指定的空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多