如何在不覆盖 Windows 任务栏的情况下最大化窗口并禁用调整大小 - tkinter / tk-toolkit

问题描述 投票:0回答:1

我使用 Tkinter 在 python 中编写了一个应用程序。我希望它可以缩放并且不能调整大小,但是当我这样做时,它会隐藏我想保留的任务栏。有什么办法可以做到吗?

from tkinter import *

root=Tk()
root.state('zoomed')
root.resizable(False, False)

蟒蛇3.8 视窗 10

python windows tkinter winapi tk-toolkit
1个回答
0
投票

Tkinter 在这种情况下只是调用操作系统,这就是 Windows 对这种状态组合的反应。相关源代码可以在这里找到:

改变状态实现细节.

要实现你想要的,你可以使用 ctypes 并检索当前监视器的工作区域。更好地使用

win32api
完成此任务,但用于概念验证:

import tkinter as tk
import ctypes

user32 = ctypes.WinDLL('user32')
MONITOR_DEFAULTTONEAREST = 0x00000002

class RECT(ctypes.Structure):
    _fields_ = [
        ('left', ctypes.c_long),
        ('top', ctypes.c_long),
        ('right', ctypes.c_long),
        ('bottom', ctypes.c_long)
        ]
    def dump(self):
        return [int(val) for val in (
            self.left, self.top, self.right, self.bottom)]

class MONITORINFO(ctypes.Structure):
    _fields_ = [
        ('cbSize', ctypes.c_ulong),
        ('rcMonitor', RECT),
        ('rcWork', RECT),
        ('dwFlags', ctypes.c_ulong)
        ]

def maximize(window):
    hWnd = int(window.wm_frame(),16)
    mi = MONITORINFO()
    mi.cbSize = ctypes.sizeof(MONITORINFO)
    mi.rcMonitor = RECT()
    mi.rcWork = RECT()
    hMonitor = user32.MonitorFromWindow(hWnd,MONITOR_DEFAULTTONEAREST)
    result = user32.GetMonitorInfoA(hMonitor, ctypes.byref(mi))
    x,y,w,h = mi.rcWork.dump()
    window.geometry(f'{w}x{h}+0+0')

root = tk.Tk()
maximize(root)
root.resizable(False, False)

在 Windows 11 上使用 Python 3.11 和 tkinter 3.6.12 进行测试

注意这是在这个example

的帮助下创建的
© www.soinside.com 2019 - 2024. All rights reserved.