首页 > 解决方案 > 如何在启动时最大化 tkinter 应用程序,就像模仿最大化按钮一样?

问题描述

我试图找到这个答案,但令人惊讶的是几乎没有运气。这是我正在运行的内容:

Python 3.8.5 64 位

TKinter 8.6

我发现的两个屏幕尺寸来源是:

import tkinter as tk
from win32api import GetSystemMetrics

screen_height = GetSystemMetrics(1)
screen_width = GetSystemMetrics(0)

mainWindow = tk.Tk()

mainWindow.configure(width=screen_width, height=screen_height)

mainWindow.mainloop()

这种方法的问题在于,它创建了一个从一个角落到另一个角落的窗口,包括我的屏幕的确切大小,这意味着考虑到任务栏和边框,应用程序会从屏幕上剪掉,也会在任务栏的“下方”。

我还发现了这种方法:

import tkinter as tk

mainWindow = tk.Tk()
mainWindow.state("zoomed")

mainWindow.mainloop()

这正是我想要的,模仿应用程序的外观,如果我单击最大化按钮,与屏幕的两个边缘对齐并在任务栏顶部“休息”。

但是,如果我想创建一个与窗口大小相同的画布,但在我的 Tk 对象上使用winfo_height()winfo_width(),则返回的值分别为 1 和 1。我不确定这是否是因为这些值是在将状态设置为“缩放”之前设置的,但 tk.Canvas 中的高度和宽度参数的单位为像素(默认)、英寸、毫米、厘米或打印点。因此我不能使用这些确切的值来创建画布。

import tkinter as tk

mainWindow = tk.Tk()
mainWindow.state("zoomed")

mainCanvas = tk.Canvas(height=mainWindow.winfo_height(), width=mainWindow.winfo_width(), bg="blue")

mainCanvas.pack()

mainWindow.mainloop()

最后是可以使用的属性部分:

#blah code the same as before

mainWindow.attributes("-fullscreen", True)

#blah code till the end as before

不幸的是,这会创建一个全屏应用程序,就像您在大多数浏览器上按 F11 或全屏播放 youtube 视频等一样。这显然不是我想要的。

在抓取应用程序的高度和宽度之前,我是否需要创建一个等待窗口状态更改为缩放的侦听器?或者有什么方法可以简单地以“最大化”状态启动应用程序,就好像默认情况下按下了最大化按钮一样。

我无法相信在 tk 类的 .state 方法中找到任何东西的难度,也无法相信任何关于简单地最大化 TK 应用程序窗口的信息。我发现的所有内容都来自我分享的三个示例之一,我将非常感谢任何人提供的任何帮助!

谢谢

标签: pythontkinter

解决方案


不要尝试以正确的大小创建画布,而是以您认为应该的最小大小创建它,然后让 tkinter 的几何管理器之一将其扩展以填充窗口。

例如,如果你这样做mainCanvas.pack(fill="both", expand=True),它将导致画布填满窗口,而无需计算画布的大小,也无需update在启动期间调用。


推荐阅读