python - 如何在启动时最大化 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 应用程序窗口的信息。我发现的所有内容都来自我分享的三个示例之一,我将非常感谢任何人提供的任何帮助!
谢谢
解决方案
不要尝试以正确的大小创建画布,而是以您认为应该的最小大小创建它,然后让 tkinter 的几何管理器之一将其扩展以填充窗口。
例如,如果你这样做mainCanvas.pack(fill="both", expand=True)
,它将导致画布填满窗口,而无需计算画布的大小,也无需update
在启动期间调用。
推荐阅读
- sql - 根据选择的结果在列中设置值。SQL 服务器
- python - 如何列出 Python 包的额外功能
- swift - 我们如何快速检查资产文件夹中是否存在文件?
- python - 拍卖程序问题,需要帮助检查 python 子列表中的字符串 - 数字
- javascript - 从 Promise 中解构响应
- react-native - 在列表中加载更多数据时,平面列表项目中的参考不会返回正确的 PageY 位置
- node.js - 我需要帮助使用 nodejs 中的属性对数组进行排序
- java - 出现错误 java.lang.IllegalStateException:没有可用的事务性 EntityManager
- docker - 访问 Dockerfile 中的 container_name(来自 docker-compose)
- python - 如何检查文件是否已经在缓存中?