导入PyAutoGUI时Tkinter窗口大小自动改变,如何禁用该调整行为
问题根因
该窗口尺寸变化由Windows平台下pyautogui的默认初始化逻辑导致:pyautogui导入时会自动调用Windows API开启程序的高DPI感知,而Tkinter默认运行在DPI虚拟化模式下,两者DPI适配模式冲突会导致窗口被强制缩放,多显示器不同DPI的场景下该冲突会更明显。
可直接使用的解决方案
方案1:提前固定进程DPI适配模式(最推荐)
进程的DPI感知设置仅可配置一次,在导入pyautogui、初始化Tkinter之前手动设置为和Tkinter默认一致的DPI虚拟化模式,即可完全避免pyautogui修改适配规则:
import sys from tkinter import * import ctypes # 仅Windows平台需要该配置 if sys.platform == "win32": # 0 = DPI虚拟化模式,和Tkinter默认行为完全一致 ctypes.windll.shcore.SetProcessDpiAwareness(0) # 之后再初始化窗口和导入pyautogui都不会触发尺寸变化 win = Tk() win.geometry("1270x725+0+0") win.minsize(width=1270, height=600) win.maxsize(width=1270, height=600) def test(): import pyautogui as pag button = Button(win, command=test) button.place(relx=.5, rely=.5) win.mainloop()
方案2:强制关闭pyautogui的屏幕检测逻辑
如果你的业务场景仅使用pyautogui的键鼠控制能力,不需要动态检测显示器分辨率,可以直接覆盖pyautogui的屏幕尺寸检测方法,避免它读取多显示器参数触发DPI调整:
# 导入pyautogui前先固定屏幕尺寸配置 import pyautogui # 固定为你常用的屏幕分辨率,跳过自动检测逻辑 pyautogui.size = lambda: (1920, 1200)
适配验证
修改后不管是启动时连接外接显示器还是仅用笔记本屏幕运行,导入pyautogui时都不会再触发窗口尺寸变化。
内容的提问来源于stack exchange,提问作者neo_codex
相关产品推荐
相关产品推荐

