【问题标题】:Python tkinter. How to get height of MenuPython tkinter。如何获取菜单的高度
【发布时间】:2016-02-13 02:32:35
【问题描述】:

我正在尝试设置窗口的最小尺寸。

我遵循How do I set a minimum window size in tkinter?上发布的解决方案

但是,这并没有考虑到我拥有的菜单的高度。

我的菜单代码是:

menubar = tk.Menu(self)

menu = tk.Menu(menubar, tearoff=0)
menu.add_command(label="Change user name", \
                 command=self.prompt_new_name)
menu.add_separator()
menu.add_command(label="Exit", command=self.close_app)
menubar.add_cascade(label="Menu", menu=menu)
self.master.config(menu=menubar)

我设置最小尺寸的方式是:

master = self.master
master.update()
print(master.winfo_height())
print(menubar.winfo_height())
master.minsize(master.winfo_width(), master.winfo_height())

master.winfo_height() 看起来它返回窗口的高度,就好像没有菜单小部件一样。我尝试打印菜单栏的高度,但它返回 1。

如何获取包括菜单在内的窗口高度,或者仅单独获取菜单的高度,以便将其添加到 master.winfo_height() 并将其设置为 minsize?

【问题讨论】:

  • 为什么需要窗口和菜单一样高?这似乎是一个非常不寻常的要求。
  • 没有菜单那么高。我需要它不小于初始窗口大小,包括菜单和所有其他小部件。现在,因为 master.winfo_height() 不包括菜单的高度,我仍然可以将主窗口变小,并且最底部的小部件被切断。
  • 只要您使用grid 和/或pack,窗口总是足够大,可以容纳所有内容。没有理由设置最小尺寸。让 tkinter 为您计算尺寸。我认为您正在尝试解决一个非问题。
  • 这对我来说是一个实际的问题。我可以单击窗口的底部边框并向上移动鼠标以使窗口变小。然后底部的小部件被切断。
  • 我遇到了同样的问题,窗口最初可能足够大以包含所有内容,但可以将其调整为更小,切断小部件(是的,我认识到通常允许用户拍摄自己在脚下,但我不是那个发号施令的人)。如果我使用master.minsize(master.winfo_reqwidth(), master.winfo_reqheight() + menu.winfo_reqheight()) 设置(在强制update/update_idletasks 之后)最小尺寸(菜单报告reqheight 为60)它有点工作,但它垫,其中一半不能缩小。

标签: python menu tkinter height size


【解决方案1】:

请阅读winfo_height()winfo_width()documentation。 正如它所说的那样:

w.winfo_height()

[...] 请参阅上面.winfo_geometry() 下关于几何更新的备注。您可能更喜欢使用.winfo_reqheight(),如下所述,它始终是最新的。

w.winfo_reqheight()

这些方法返回小部件 w 的请求高度。这是必需的最小高度,以便 w 的所有内容都有所需的空间。实际高度可能因与几何经理协商而有所不同。

也可以看看this question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2023-03-27
    • 2017-05-17
    相关资源
    最近更新 更多