Python3.7下不使用win32api获取任务栏高度的方法
解决方案
1. 简化屏幕尺寸获取逻辑
你当前通过字符串拆分提取屏幕宽高的方式过于繁琐,pyautogui.size() 返回的 Size 对象支持直接属性访问:
winSize = pyautogui.size() screen_width = winSize.width screen_height = winSize.height
2. 用标准库ctypes获取排除任务栏的工作区尺寸
无需依赖第三方win32api,Python自带的ctypes可以直接调用Windows系统API,获取系统工作区(即屏幕减去任务栏后的可用区域):
import ctypes user32 = ctypes.windll.user32 work_area = ctypes.wintypes.RECT() user32.GetWindowRect(user32.GetDesktopWindow(), ctypes.byref(work_area)) # 计算工作区的宽高 work_width = work_area.right - work_area.left work_height = work_area.bottom - work_area.top
3. 修改后的完整代码
整合上述逻辑后的最终代码如下:
import pyautogui import customtkinter import ctypes customtkinter.set_appearance_mode("dark") customtkinter.set_default_color_theme("dark-blue") root = customtkinter.CTk() root.title('custom title bar') # 获取排除任务栏的工作区尺寸 user32 = ctypes.windll.user32 work_area = ctypes.wintypes.RECT() user32.GetWindowRect(user32.GetDesktopWindow(), ctypes.byref(work_area)) work_width = work_area.right - work_area.left work_height = work_area.bottom - work_area.top # 设置窗口为工作区大小,定位到屏幕左上角 root.geometry(f"{work_width}x{work_height}+0+0") # 移除默认标题栏 root.overrideredirect(True) # 创建自定义标题栏 title_bar = customtkinter.CTkFrame(master=root, corner_radius=0) title_bar.pack(fill="x") # 标题栏文本 title_label = customtkinter.CTkLabel(master=title_bar, text="custom title bar") title_label.pack(pady=2, padx=10, side='left') # 关闭按钮 close = customtkinter.CTkButton(master=title_bar, text="X", fg_color="#202020", hover_color="#ff1c1c", width=30, corner_radius=0, command=root.quit) close.pack(pady=0, padx=0, side='right') root.mainloop()
补充说明
ctypes是Python标准库,无需额外安装,完全兼容Python3.7及以上版本GetWindowRect(user32.GetDesktopWindow())会自动识别系统任务栏的位置和高度,返回的工作区区域不会被任务栏覆盖- 调整了标题栏布局,让其自动填充窗口宽度(
fill="x"),避免固定宽度导致的适配问题
内容的提问来源于stack exchange,提问作者APersonCoding
相关产品推荐
相关产品推荐

