上面问题也可以换一个说法,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 时窗口大小发生变化的更多相关文章

  1. eclipse中导入web项目时,出现转不了项目类型的问题解决方案

    解决步骤: 1.进入项目目录,可看到.project文件,文本编辑器打开. 2.找到<natures>...</natures>代码段,加入如下标签内容并保存: <nat ...

  2. 在SQL中导入Excel数据时强制以文本类型导入

    Excel不是关系型数据库,在导入到sql中时对于数值型,sql有时int型会处理成float,有时数字文本混排的列,sql会认为是数值型,导入的结果有的数据变成了null,但是用sql导出excel ...

  3. 在Eclipse中导入web项目时的问题总结

    一.导入项目 在Project Explorer右击,import-->Existing Projects into Workspace,选择要导入的文件,Finish. 二.解决报错 (1)T ...

  4. drupal 8——在CKEditor中导入video media时添加caption会导致video缩小至消失

    在CKEditor中,我点击media browser,选择video型的media,并在caption中输入video的名字.当我保存后发现在前台页面的video消失了,只留下video的名字,点击 ...

  5. 向MyEclipse的项目中导入js文件时,出现小红叉

    这个问题困扰我很久.刚开始时,也没有解决,因此也在网上寻找解决方法,还是没能解决.最近做项目时再一次出现了这样的问题,于是决定还是再找找办法.在此,分享一下自己的解决方法,给正处于痛苦中的童鞋们带来解 ...

  6. 经常在eclipse中导入web项目时,出现转不了项目类型的问题,导入后就是一个java项目。

    1.在eclipse的项目上点右键,刷新项目.2.在项目上点右键,进入属性(properties)3.在左侧列表项目中点击选择“Project Facets”,在右侧选择“Dynamic Web Mo ...

  7. 解决从Excel导入数据库,导入到DataTable时数据类型发生变化的问题(如数字类型变成科学计数法,百分数变成小数)

    做项目的时候,C#读取Excel数据到DataTable或者DataSet,设断点查看DataTable,发现Excel的显示为较长位数数字的字段如0.000012在DataTable中显示为科学计数 ...

  8. 【已解决】phpMyAdmin中导入mysql数据库文件时出错:您可能正在上传很大的文件,请参考文档来寻找解决办法

    期间,用phpMyAdmin去导入90M左右的mysql数据库文件时出错: 您可能正在上传很大的文件,请参考文档来寻找解决方法. [解决过程] 1.很明显,是文件太大,无法导入.即上传文件大小有限制. ...

  9. 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 ...

  10. hibernate导入大量数据时,为了避免内存中产生大量对象,在编码时注意什么,如何去除?

    Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( i ...

随机推荐

  1. 经验分享:春招零Offer,5月份还有机会吗?

    先说答案:5 月份依然有拿到 Offer 的机会. 5月份春招结束了吗? 对于应届大学生来说(也就是今年暑假毕业的学生),5 月中旬春招就陆续结束了,但是 5 月份会有很多补录的机会. 对于非应届的大 ...

  2. 导入使用es

    from django.shortcuts import render, HttpResponsefrom elasticsearch import Elasticsearchfrom elastic ...

  3. LLM实战:当网页爬虫集成gpt3.5

    1. 背景 最近本qiang~关注了一个开源项目Scrapegraph-ai,是关于网页爬虫结合LLM的项目,所以想一探究竟,毕竟当下及未来,LLM终将替代以往的方方面面. 这篇文章主要介绍下该项目, ...

  4. 一文了解npm install -g和npm install --save-dev的关系

    本文分享自华为云社区<npm install -g 和 npm install --save-dev 的关系>,作者: SHQ5785. 一.npm install 本地安装 将安装包放在 ...

  5. nginx源码安装步骤

    1.安装依赖包 yum install -y gcc yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install ...

  6. 分布式缓存NewLife.Redis

    NewLife.Redis 是一个Redis客户端组件,以高性能处理大数据实时计算为目标. Redis协议基础实现位于Redis/RedisClient,FullRedis为扩展实现,主要增加列表结构 ...

  7. 音视频-YUV数据格式

    一.YUV格式 1)kCVPixelFormatType_420YpCbCr8PlanarFullRange = 'f420' 对应YUV I420格式 2)kCVPixelFormatType_42 ...

  8. 【论文笔记】R-CNN系列之代码实现

    代码源码 前情回顾:[论文笔记]R-CNN系列之论文理解 整体架构 由三部分组成 (1)提取特征的卷积网络extractor (2)输入特征获得建议框rois的rpn网络 (3)传入rois和特征图, ...

  9. 鸿蒙HarmonyOS实战-ArkTS语言基础类库(容器类库)

    前言 容器类库是指一组用于存储和管理数据的数据结构和算法.它们提供了各种不同类型的容器,如数组.链表.树.图等,以及相关的操作和功能,如查找.插入.删除.排序等. 容器类库还可以包含其他数据结构和算法 ...

  10. RabbbitMQ RabbitListener使用IP动态队列 Attribute value must be constant

    在RabbitMQ消息队列使用 @RabbitListener 接收消息,队列名称使用常量命名,但是如果使用动态队列名称,比如根据系统 ip 命名队列名称. 获取服务器 IP /** * 获取服务器i ...