tkinter python 最大化窗口

Posted

技术标签:

【中文标题】tkinter python 最大化窗口【英文标题】:tkinter python maximize window 【发布时间】:2013-04-05 13:11:48 【问题描述】:

我想将一个窗口初始化为最大化,但我不知道该怎么做。我在 Windows 7 上使用 python 3.3 和 Tkinter 8.6。我想答案就在这里:http://www.tcl.tk/man/tcl/TkCmd/wm.htm#m8 但我不知道如何将它输入到我的 python 脚本中

此外,我需要获取窗口的宽度和高度(无论是最大化还是用户之后重新缩放),但我想我可以自己找出来。

【问题讨论】:

【参考方案1】:

您可以使用此代码

import tkinter as tk
window = tk.Tk()
 
window.attributes('-zoomed',True)

window.mainloop()

【讨论】:

【参考方案2】:

使用 TkAgg 作为后端,这是在没有全屏的情况下最大化窗口的唯一组合:

win_manager = plt.get_current_fig_manager()
win_manager.window.state('zoomed')
win_manager.full_screen_toggle()

【讨论】:

【参考方案3】:

我在其他网站上找到了这个:

    import Tkinter

    MyRoot = Tkinter.Tk()
    MyRoot.state("zoomed")

    MyRoot.mainloop()

这解决了我的问题。

【讨论】:

非常感谢@rpecas...这是最简单的一个 @user3292534 的answer 的副本。【参考方案4】:

最pythonic的是“@J.F.Sebastian提到的root.wm_state('zoomed')

【讨论】:

无法使用 Tkinter 8.6 在 Python3.6 上工作。不允许使用zoomed【参考方案5】:

第一种方法是使用root.state('zoomed'),但不应该是普遍可用的。它适用于 Windows 和我的 Ubuntu 机器。但是,在我的 Arch 机器下却没有。


第二种是先获取maxsize,然后手动设置geometry,如:

m = root.maxsize()
root.geometry('x+0+0'.format(*m))

这适用于大多数机器,但并非所有机器。例如,在我的 Arch 下,maxsize() 返回(1425, 870),而最大化窗口的真实几何形状应该是(1440, 848)。所以,你也不能依赖它。


第三个,我认为最好的方法是使用root.wm_attributes('-zoomed', 1)。它是普遍可用的,似乎是最安全的。在某些机器上,in 只能按宽度或高度进行缩放,但与以前的方法相比,这种方法永远不会为您提供部分位于屏幕之外的窗口。

最后,如果您想要全屏,而不仅仅是缩放窗口,请使用root.wm_attributes('-fullscreen', 1)。它提供了到窗口管理器行为的本机链接,因此比使用overrideredirect 和手动设置几何图形(在某些平台上可能导致非托管窗口,只能通过其自己的界面关闭或终止进程)工作得更好, 不会显示在任务栏等...)

【讨论】:

【参考方案6】:

你可以通过调用来做到这一点

root.state('zoomed')

【讨论】:

像魅力一样工作,这是唯一真正为我工作的人 也适用于 windows,不像 root.attributes('-zoomed', True)。 这就是我想要的。 :) 在 python 3.9 中工作 |窗户 |【参考方案7】:

要显示带有标题栏的最大化窗口,请使用“缩放”属性

root = Tk()
root.attributes('-zoomed', True)

【讨论】:

它可能仅适用于 Windows。你也可以这样说:root.wm_state('zoomed') 它不仅适用于 Windows。它在 Xubuntu 上运行良好。 适用于 Ubuntu 14.04 - J.F 下次最好检查一下自己。 正如其他人所说,'-zoomed' 在 Windows 版本上不可用。 无法在 Python3.6、Tkinter 3.8 上使用 XFCE 不稳定的 Debian。【参考方案8】:

如果要设置全屏属性为True,很简单:

root = Tk()
root.attributes('-fullscreen', True)

但是,它不显示标题栏。如果你想让它保持可见,你可以使用geometry() 方法调整 Tk 元素的大小:

root = Tk()
w, h = root.winfo_screenwidth(), root.winfo_screenheight()
root.geometry("%dx%d+0+0" % (w, h))

使用winfo_width()winfo_height() 可以获取宽度和高度或窗口,还可以将事件处理程序绑定到<Configure> 事件:

def resize(event):
    print("New size is: x".format(event.width, event.height))

root.bind("<Configure>", resize)

【讨论】:

还有root.overrideredirect(True)(去掉标题栏) 只要我有一台显示器,它就可以工作。如何更改代码以仅在一台显示器上最大化,而不是在整个虚拟桌面上最大化? 出色的工作,这两种解决方案都取决于您是否需要标题栏。 这不会最大化窗口,正如您在右上角的三个小按钮上看到的那样。使用整个屏幕不同于最大化一个窗口。 由于标题栏和窗口管理器的其他内容,将窗口位置设置为 0|0 在窗口上不起作用。 @jfs 但是 Tk.overrideredirect 函数不会直接将其删除。而是(在 Windows 上)告诉 Windows 窗口管理器完全忽略该窗口,因此该窗口没有框架或标题栏。

以上是关于tkinter python 最大化窗口的主要内容,如果未能解决你的问题,请参考以下文章

删除 Tkinter 中的最小化/最大化按钮

在tkinter中关闭窗口之前执行某个命令[重复]

tkinter窗体启动时默认最大化怎么设置

Python-Tkinter 窗口组件之Scale

Tkinter,错误最大递归深度超出

Python tkinter Canvas root.after() 超出最大递归深度