【发布时间】:2021-06-04 12:19:45
【问题描述】:
我试图找到这个答案,但令人惊讶的是几乎没有运气。 这是我正在运行的:
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 应用程序窗口的信息。我发现的所有内容都来自我分享的三个示例之一,如果有人能提供任何帮助,我将不胜感激!
谢谢
【问题讨论】:
-
看this。
-
TheLizzard - 这正是我在提出这个问题之前看过的文章之一,我的问题是,如上所述,winfo_height 和 winfo_width 值为 1,我假设它们为 1 '在“缩放”状态生效之前设置,或者如果我没有“缩放”状态,它默认为我认为“200x200”。我可以创建一个调整大小的事件处理程序,但我不确定当时的事件是什么,因为它必须在 .state("zoomed") 之后或一些初始化事件之后。
-
或者更确切地说是 screen_width 和 screen_height 导致了我所描述的关于屏幕剪辑超出任务栏或进入我的第二个显示器的问题。
-
你必须调用
<tkinter.Tk>.update()以便 tkinter 可以更新自身,然后调用winfo_height和winfo_width。但这将显示 1 帧的窗口。 -
谢谢,我现在觉得很可笑,但它所做的只是在 .state("zoomed") 语句之后的 mainWindow.update() 。我会以我拥有的所有东西发誓我已经这样做了,但也许我之前把它放在了错误的顺序上。再次感谢您!