为全屏调整 tkinter window

resizing tkinter window for full screen

我知道有很多这样的帖子。但是,我不认为我遇到过这样的问题。

我知道以下将获取屏幕的当前宽度和高度并将 tkinter window 设置为这个大小,然后类似地设置 canvas 我们是否希望拥有一个。

import tkinter as tk
root = tk.Tk()
width = root.winfo_screenwidth()
height = root.winfo_screenheight()
root.geometry("%dx%d" % (width, height))
canvas = tk.Canvas(root, .....)
canvas.pack(fill = "both", expand = True)

但是,我在使用它时注意到的是,始终有一部分 tkinter window 从屏幕底部的任务栏中切掉。我觉得这有点烦人,尤其是当您有标签或其他希望在底部可见的功能时。

有没有办法解决这个问题?我知道我们可以从高度中减去一个偏移因子来解释屏幕底部可能的任务栏,但这会笨拙地取代 tkinter canvas。

我相信在 Windows.

上无法从 Tkinter 内部实际获取任务栏信息

但您不必这样做。如果您将主 window 的状态设置为 "zoomed",Tkinter 将要求 Windows 最大化您的 window,而 Windows 将负责让您适应与任务栏一起使用 - 还可以处理您可能拥有的任何其他奇怪的装饰,并处理自动隐藏任务栏等。

root.state('zoomed')

据我所知,Tkinter 没有记录这个值(Tkinter 书中的 state 文档只说 'normal'、'iconic'、'withdraw' , 和 'icon' 是允许的)。

但是,通常情况下,如果您转向 Tcl/Tk 文档,您会发现 Tkinter 的文档并不完整。即使在 the tutorial 中,它也提到:

On most systems, you can temporarily remove the window from the screen by iconifying it. In Tk, whether or not a window is iconified is referred to as the window's state. The possible states for a window include "normal" and "iconic" (for an iconified window), as well as several others: "withdrawn", "icon" or "zoomed".

wm state 的 Tk reference documentation 说:

… either normal, iconic, withdrawn, icon, or (Windows and Mac OS X only) zoomed.

此外,IIRC,您可以将 "zoom" 用于 "zoomed"(也可以将 "withdraw" 用于 "withdrawn"、"iconified" 或 "iconify" "iconic","iconwindow" "icon"),但 Tk 试图保持不一致的友好。