【问题标题】:Window size of tkinter programtkinter 程序的窗口大小
【发布时间】:2017-02-20 07:53:11
【问题描述】:

实际上,我认为 tkinter 窗口尽可能大。不幸的是,这对我来说不是真的(我使用 Lubuntu 16.04)。

我的问题: 请有人解释一下下面的例子吗?我不明白 tkinter 的行为。


这里是一个例子:

import tkinter as tk

root = tk.Tk()

menubar = tk.Menu(root)

file_menu = tk.Menu(menubar)

menubar.add_cascade(label="This is a very long string because it's just a test . . . ", menu=file_menu)
file_menu.add_command(label="New", accelerator="Ctrl+N")

root.config(menu=menubar)
root.mainloop()

截图: 窗户不够大。为什么?


另一个例子(带有容器Frame):

import tkinter as tk

root = tk.Tk()

container = tk.Frame(root).pack()

menubar = tk.Menu(container)

file_menu = tk.Menu(menubar)

menubar.add_cascade(label="This is a very long string because it's just a test . . . ", menu=file_menu)
file_menu.add_command(label="New", accelerator="Ctrl+N")

root.config(menu=menubar)
root.mainloop()

屏幕截图:非常非常小!你真的看不出来。但为什么会这样呢?

【问题讨论】:

    标签: python user-interface ubuntu tkinter


    【解决方案1】:

    Tk 中的窗口大小是窗口几何管理器的函数。对于您的顶级窗口,几何管理器是“wm”,这意味着它由平台窗口管理器管理。这会询问应用程序窗口的大小或设置默认值。菜单小部件不提供大小,因此不会影响几何计算。因此,您将获得一个默认的顶级大小,因为您没有在内部管理任何小部件。

    在第二种情况下,您创建了一个没有大小尺寸的框架,其默认高度和宽度为 0。您打包它,设置顶层 wdget 为其从属使用打包几何管理器。这会询问从属设备(您的框架)它们需要多少空间,并将主设备(顶层)设置为合适的大小以容纳它们。这里是 0。如果您设置框架的宽度和高度,顶层将展开以包含它。

    【讨论】:

    • 那么问题是菜单栏与窗口大小无关?
    • 是的。菜单与顶层相关联。它不是“内部”。 Tk 文档提到了这一点 (tcl.tk/man/tcl8.6/TkCmd/toplevel.htm#M11),指出在 windows 上菜单是装饰的一部分并由窗口框架管理。它在 X11 上略有不同,但 winfo_manager 会告诉您管理每个小部件的内容。
    猜你喜欢
    • 2016-05-22
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多