【问题标题】:How do I set the initial window size as the minimum window size in tkinter?如何将初始窗口大小设置为 tkinter 中的最小窗口大小?
【发布时间】:2021-12-05 02:07:54
【问题描述】:

我的理解是,在 __init__ 方法中初始化所有框架和小部件后,tkinter 窗口会调整大小以适应所有这些组件。

我想将窗口的初始化大小设置为其最小大小。我希望能够最大化和缩放窗口更大,但我不希望窗口小到足以开始隐藏小部件。

我该如何做到这一点?

【问题讨论】:

  • 您是说要限制用户缩小窗口吗?你真的有这么多的小部件,有些被砍掉,或者这是一个布局问题,东西被砍掉可能不正确(即:滚动条消失而不是文本小部件缩小)?

标签: tkinter


【解决方案1】:

您也可以在不进入主循环的情况下立即强制更新,方法如下:

root = Tk()
# set up widgets here, do your grid/pack/place
# root.geometry() will return '1x1+0+0' here
root.update()
# now root.geometry() returns valid size/placement
root.minsize(root.winfo_width(), root.winfo_height())

effbot tkinterbook 上update() 的描述:

处理所有未决事件,调用事件回调,完成任何 待定几何管理,根据需要重绘小部件,并调用 所有挂起的空闲任务。这种方法应该小心使用,因为它 如果被错误调用,可能会导致非常糟糕的比赛条件 地点(例如,来自事件回调中,或来自函数 可以以任何方式从事件回调等中调用)。当在 有疑问,请改用 update_idletasks。

我在尝试弄清楚如何在跳入主循环之前弄清如何执行诸如获取小部件的大小/位置之类的事情时,经常使用此功能。

【讨论】:

  • 这比我的回答要干净得多。谢谢!
【解决方案2】:

我知道这个问题很老了,但这是另一种方式:

root = Tk()
root.minsize(foo, bar)

root.minsize() 将窗口的最小尺寸设置为 foobar,其中 foo 和 bar 分别是窗口的宽度和高度。

但是,您必须在主循环完成运行之前运行此代码。只有调用该命令后才会生效。

【讨论】:

  • 您必须将该代码放在主循环之前,这不是真的。
【解决方案3】:

我想通了:

def __init__(self, master):
    ...
    self.master.update_idletasks()
    self.master.after_idle(lambda: self.master.minsize(self.master.winfo_width(), self.master.winfo_height()))

【讨论】:

    【解决方案4】:
    root = Tk()
    

    自从创建了根窗口。根窗口是我们程序中的主应用程序窗口。它有一个标题栏和边框。这些由窗口管理器提供。它必须在任何其他小部件之前创建。

    root.geometry("250x150+300+300")
    

    geometry() 方法设置窗口的大小并将其定位在屏幕上。前两个参数是窗口的宽度和高度。最后两个参数是x,y屏幕坐标。

    app = Example(root)
    

    这里我们创建应用程序类的实例。

    root.mainloop()  
    

    最后,我们进入主循环。事件处理从这一点开始。主循环从窗口系统接收事件并将它们分派给应用程序小部件。当我们点击标题栏的关闭按钮或调用 quit() 方法时,它就会终止。

    我希望你觉得这很有用。

    【讨论】:

    • 这似乎根本没有回答这个问题。您的答案与设置窗口的最小尺寸有什么关系?
    • 没有单一的魔法函数可以将帧强制为最小或固定大小。但是,您当然可以通过为框架指定宽度和高度来强制调整框架的大小。
    • @miksiii 这个“魔术”功能是其他答案给出的。这甚至不会阻止用户以任何方式调整其大小,也不会阻止小部件被隐藏,正如 OP 所要求的那样。
    猜你喜欢
    • 2019-02-25
    • 2023-04-11
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-18
    • 2012-08-31
    • 2010-10-11
    相关资源
    最近更新 更多