我使用 Tkinter 在 python 中编写了一个应用程序。我希望它可以缩放并且不能调整大小,但是当我这样做时,它会隐藏我想保留的任务栏。有什么办法可以做到吗?
from tkinter import *
root=Tk()
root.state('zoomed')
root.resizable(False, False)
蟒蛇3.8 视窗 10
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
的帮助下创建的