如何在Tkinter中创建仅占全屏宽度或高度的窗口?
Tkinter实现单方向全屏窗口(仅宽/仅高占满屏幕)
Tkinter没有原生的单方向最大化标志,你可以通过手动计算屏幕工作区尺寸+精准定位窗口来实现需求,以下是两种场景的可行方案:
一、精准适配Windows工作区(避开任务栏)
如果不想让窗口遮挡任务栏,用ctypes调用系统API获取排除任务栏的工作区信息,再设置窗口尺寸:
import tkinter as tk import ctypes root = tk.Tk() root.title("仅宽占满窗口") # 获取系统工作区(排除任务栏)的坐标和尺寸 user32 = ctypes.windll.user32 monitor_info = ctypes.create_string_buffer(40) user32.GetMonitorInfoA(user32.MonitorFromWindow(root.winfo_id(), 0), monitor_info) # 解析工作区的左上、右下坐标 work_area = ctypes.c_int * 4 work = work_area.from_buffer_copy(monitor_info[20:36]) work_x, work_y = work[0], work[1] work_width = work[2] - work[0] work_height = work[3] - work[1] # 场景1:占满工作区宽度,高度为工作区的1/2,对齐顶部 root.geometry(f"{work_width}x{work_height//2}+{work_x}+{work_y}") # 场景2:占满工作区高度,宽度为工作区的1/2,对齐左侧 # root.geometry(f"{work_width//2}x{work_height}+{work_x}+{work_y}") # 可选:固定窗口大小,禁止拖动调整 root.resizable(False, False) root.mainloop()
二、简单适配(含任务栏区域)
如果不需要避开任务栏,直接用Tkinter自带的屏幕尺寸方法,关键是要指定窗口起始坐标(解决你之前遇到的错位问题):
import tkinter as tk root = tk.Tk() screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() # 占满全屏宽度,高度为屏幕一半,顶部对齐(x=0,y=0) root.geometry(f"{screen_width}x{screen_height//2}+0+0") # 占满全屏高度,宽度为屏幕一半,左侧对齐 # root.geometry(f"{screen_width//2}x{screen_height}+0+0") root.mainloop()
关键说明
- 你之前用
geometry错位的核心原因是没指定窗口的起始坐标(+x+y部分),加上后就能精准定位; state('zoomed')和-fullscreen=True都是双向最大化,无法单独控制单方向,所以只能手动计算实现。
内容的提问来源于stack exchange,提问作者YurichBRO
相关产品推荐
相关产品推荐

