在这种情况下,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}+-10+0')
root = tk.Tk()
maximize(root)
root.resizable(False, False)
root.mainloop()
在 Windows 11 上使用 Python 3.11 和 tkinter 3.6.12 进行测试
请注意,这是在此帮助下创建的example