解决方案 | 在 Tkinter 中导入 pywinauto/pyautogui 时窗口大小发生变化
上面问题也可以换一个说法,pywinauto/pyautogui 时改变了tkinter的原有的窗口大小。这个问题困扰了我好几天而且网上有这样的问题但是并没有答案,今天摸索出答案给大家分享下。解决方法非常简单。
1 问题:
pywinauto/pyautogui 时改变了tkinter的原有的窗口大小。
看动图可以发现区别:加了pywinauto会导致tkinter界面发生缩放,一般发生于使用外接显示屏或者把显示器比例调整到非100%,如125%、150%时候。

下面以import pywinauto为例,可以发现导入pywinauto之后马上界面变小了。

2 解决方法:
在代码最顶部增加2行代码:
import ctypes
ctypes.windll.shcore.SetProcessDpiAwareness(0) #解决缩放
完整代码如下:
import ctypes
ctypes.windll.shcore.SetProcessDpiAwareness(0) #解决缩放 from tkinter import *
import pywinauto
win = Tk()
win.geometry("1270x725") win.mainloop()
取值0、1、2的意义如下。0代表不感知系统显示器分辨率的缩放问题。

使用效果如下(导入了2行代码后那么尺寸可以被强行放大到了你原始的tkinter尺寸,这恰好是你需要的):

3 溯源:
pywinauto问题发生原因是C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\pywinauto win32functions.py SetProcessDpiAwareness设置。
也就是说:pywinauto为了准确识别屏幕分辨率默认把分辨率按照原始尺寸(100%)。但是由于你把显示器的分辨率改成了125%那么pywinauto感知到了这一点就强行给你恢复了。
对于pyautogui是同理的。发生于C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\pyautogui _pyautogui_win.py SetProcessDpiAwareness.
4 注意事项:
可能带来的问题,我没试过但是我猜的是可能会发生。当我们强行使用ctypes.windll.shcore.SetProcessDpiAwareness(0) #解决缩放问题后,那么不感知分辨率的放大问题了,可能带来那些通过pywinauto或者pyautogui使用坐标相关的点击可能带来问题,解决方法是直接使用读取 button对象进行click而不是坐标 。
解决方案 | 在 Tkinter 中导入 pywinauto/pyautogui 时窗口大小发生变化的更多相关文章
- eclipse中导入web项目时,出现转不了项目类型的问题解决方案
解决步骤: 1.进入项目目录,可看到.project文件,文本编辑器打开. 2.找到<natures>...</natures>代码段,加入如下标签内容并保存: <nat ...
- 在SQL中导入Excel数据时强制以文本类型导入
Excel不是关系型数据库,在导入到sql中时对于数值型,sql有时int型会处理成float,有时数字文本混排的列,sql会认为是数值型,导入的结果有的数据变成了null,但是用sql导出excel ...
- 在Eclipse中导入web项目时的问题总结
一.导入项目 在Project Explorer右击,import-->Existing Projects into Workspace,选择要导入的文件,Finish. 二.解决报错 (1)T ...
- drupal 8——在CKEditor中导入video media时添加caption会导致video缩小至消失
在CKEditor中,我点击media browser,选择video型的media,并在caption中输入video的名字.当我保存后发现在前台页面的video消失了,只留下video的名字,点击 ...
- 向MyEclipse的项目中导入js文件时,出现小红叉
这个问题困扰我很久.刚开始时,也没有解决,因此也在网上寻找解决方法,还是没能解决.最近做项目时再一次出现了这样的问题,于是决定还是再找找办法.在此,分享一下自己的解决方法,给正处于痛苦中的童鞋们带来解 ...
- 经常在eclipse中导入web项目时,出现转不了项目类型的问题,导入后就是一个java项目。
1.在eclipse的项目上点右键,刷新项目.2.在项目上点右键,进入属性(properties)3.在左侧列表项目中点击选择“Project Facets”,在右侧选择“Dynamic Web Mo ...
- 解决从Excel导入数据库,导入到DataTable时数据类型发生变化的问题(如数字类型变成科学计数法,百分数变成小数)
做项目的时候,C#读取Excel数据到DataTable或者DataSet,设断点查看DataTable,发现Excel的显示为较长位数数字的字段如0.000012在DataTable中显示为科学计数 ...
- 【已解决】phpMyAdmin中导入mysql数据库文件时出错:您可能正在上传很大的文件,请参考文档来寻找解决办法
期间,用phpMyAdmin去导入90M左右的mysql数据库文件时出错: 您可能正在上传很大的文件,请参考文档来寻找解决方法. [解决过程] 1.很明显,是文件太大,无法导入.即上传文件大小有限制. ...
- mysql数据库导入sql文件时提示“Error Code: 1153 - Got a packet bigger than 'max_allowed_packet' bytes”解决办法
向mysql数据库中导入sql文件时,如果文件过大(几百M),会提示"Error Code: 1153 - Got a packet bigger than 'max_allowed_pac ...
- hibernate导入大量数据时,为了避免内存中产生大量对象,在编码时注意什么,如何去除?
Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( i ...
随机推荐
- ETSI GS MEC 014,UE 标识 API
目录 文章目录 目录 版本 功能理解 UML UE Identity tag registration UE Identity tag de-registration API Definition U ...
- 数据库中存储bool对象的数据,使用Bit和Integer有什么区别,性能上有多大的差异
在数据库中存储布尔(Boolean)值时,常见的两种选择是使用 BIT 类型或 INTEGER 类型.两者在存储.性能和使用上的区别如下: 1. BIT 类型 存储:BIT 类型专门用于存储布尔值.通 ...
- java学习之旅(day.16)
集合框架 集合 集合:对象的容器,创建的对象就存储在集合中.集合定义了对多个对象进行操作的常用方法,可实现数组的功能 集合和数组的相同点:都是容器 集合和数组的区别: 数组定义后长度固定,集合长度不固 ...
- kubernets之横向伸缩pod与集群节点
一 pod的自动伸缩容的应用背景 在面对负载并发过高的时候,我们或许希望能够提高RS,RC以及Deployment等的replicas的参数来增加pod的cpu,mem等,或者是通过提高每个容器的r ...
- 大数据之Hadoop的HDFS存储优化—异构存储(冷热数据分离)
异构存储主要解决,不同的数据,储存在不同类型的硬盘中,达到最佳性能的问题 1)存储类型 RAM_DISK:内存镜像文件系统 SSD:SSD固态硬盘 DISK:普通磁盘,在HDFS中,如果没有主动声明数 ...
- 将mnist训练的caffemodel生成动态链接库DLL
在项目程序中经常看到动态链接库,非常好奇,想自己实现一下,于是乎尝试一波.就因为这种好奇,每天都被bug所困扰... 1. 训练caffemodel 在windows环境下搭建caffe无果,转投Ub ...
- JavaSE 关键字和标识符
目录 关键字 标识符 标识符命名规则 标识符命名规范 字面值 关键字 具有特殊含义的 命名时不可以与关键字重名 标识符 也就是名字,对类名,变量名称,方法名称,参数名称等修饰 标识符命名规则 以字母, ...
- 用 Easysearch 帮助大型车企降本增效
最近某头部汽车集团需要针对当前 ES 集群进行优化,背景如下: ES 用于支撑包括核心营销系统.管理支持系统.财务类.IT 基础设施类.研发.自动驾驶等多个重要应用,合计超 50 余套集群,累计数据超 ...
- Windows无法访问vsftpd
在搭建vsftpd的时候注意放行相应的服务,注意,是服务,不是端口!! 如果你简单的--add-port放行20和21端口,那么恭喜你,就是访问不了. 正确的方法是--add-service=ftp, ...
- Git配置环境变量
由于学习需要装了git,使用终端查看版本号时 提示 'git' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 原因 因为没有配置Git环境变量 解决方法:配置环境变量 开始菜单=>设置 ...