【问题标题】:How to maximize tkinter app on start as if to mimic the maximize button?如何在启动时最大化 tkinter 应用程序,就像模仿最大化按钮一样?
【发布时间】: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_heightwinfo_width。但这将显示 1 帧的窗口。
  • 谢谢,我现在觉得很可笑,但它所做的只是在 .state("zoomed") 语句之后的 mainWindow.update() 。我会以我拥有的所有东西发誓我已经这样做了,但也许我之前把它放在了错误的顺序上。再次感谢您!

标签: python tkinter


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-15
    • 2023-01-03
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多