1、方案一
特点字体 窗口同步放大,且字体是矢量放大,字体控件不会模糊
from PyQt5 import QtCore
from PyQt5 import QtCore, QtGui
# 适应高DPI设备
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
2、方案二、
特点字体 窗口同步放大,且字体是矢量放大,字体控件会模糊
# 适应Windows缩放
QtGui.QGuiApplication.setAttribute(QtCore.Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
3、方案三 最优方案
特点字体 窗口同步放大,且字体是矢量放大,字体控件不会模糊 且图片也会同步放大
# 是 Python 中的一个内置函数,用于判断一个对象是否具有指定的属性或方法。
# 这个属性用于启用高DPI缩放。当应用程序在高分辨率的显示设备上运行时,
# Qt会自动根据系统的DPI设置来缩放界面元素,
# 使得界面在不同分辨率的显示器上具有合适的大小和清晰度。此属性应在创建QApplication对象之前设置
# if hasattr(QtCore.Qt, 'AA_EnableHighDpiScaling'):
# print("AA_EnableHighDpiScaling")
QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True) # 适应高DPI设备
# if hasattr(QtCore.Qt, 'AA_UseHighDpiPixmaps'):
# print("AA_UseHighDpiPixmaps")
# 这个属性用于启用高分辨率位图的支持。当设置为true时,
# Qt会尝试使用高分辨率版本的位图(如果有的话),
# 以保证在高DPI显示设备上图标和其他图形元素的清晰度。这对于那些使用像素图(如PNG或JPEG图像)作为界面元素的应用程序尤其有用
QApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True)
4、更改放大因子,通过更改环境变量实现
方案特点,以上三个的优点都具备,但是有一个致命缺点,字体不会放大
QT_SCALE_FACTOR 放大的比例 字体不会放大
QT_SCREEN_SCALE_FACTORS 缩小的比例 字体不会放大
import os
import sys
# 设置QT_SCREEN_SCALE_FACTORS环境变量
# os.environ["QT_SCREEN_SCALE_FACTORS"] = "2;1.5" # 假设你有两个屏幕,第一个屏幕缩放因子为2,第二个屏幕缩放因子为1.5
# os.environ["QT_SCREEN_SCALE_FACTORS"] = "2.25" # 字体不会跟着放大
os.environ["QT_SCALE_FACTOR"] = "0.75"
最最优方案
可以根据自己的高分辨率屏幕修改算法
def QhGetScreenResolution():
# 获取屏幕分辨率(显示&物理)
# 作者:阙辉
import tkinter as tk
import pyautogui
# 创建一个隐藏的 Tkinter 根窗口
QhRoot = tk.Tk()
QhRoot.withdraw() # 隐藏根窗口
# 获取屏幕显示分辨率
QhXSwidth = QhRoot.winfo_screenwidth()
QhXSheight = QhRoot.winfo_screenheight()
# 关闭 Tkinter 根窗口
QhRoot.destroy()
print(f"屏幕显示分辨率QH: {QhXSwidth}x{QhXSheight}")
# 获取屏幕物理分辨率
size = pyautogui.size()
QhWLwidth = size.width
QhWLheight = size.height
print(f"屏幕物理分辨率QH: {QhWLwidth}x{QhWLheight}")
return QhXSwidth,QhXSheight,QhWLwidth,QhWLheight
if __name__ == "__main__":
# 是 Python 中的一个内置函数,用于判断一个对象是否具有指定的属性或方法。
# 这个属性用于启用高DPI缩放。当应用程序在高分辨率的显示设备上运行时,
# Qt会自动根据系统的DPI设置来缩放界面元素,
# 使得界面在不同分辨率的显示器上具有合适的大小和清晰度。此属性应在创建QApplication对象之前设置
# if hasattr(QtCore.Qt, 'AA_EnableHighDpiScaling'):
# print("AA_EnableHighDpiScaling")
# QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True) # 适应高DPI设备
# if hasattr(QtCore.Qt, 'AA_UseHighDpiPixmaps'):
# print("AA_UseHighDpiPixmaps")
# 这个属性用于启用高分辨率位图的支持。当设置为true时,
# Qt会尝试使用高分辨率版本的位图(如果有的话),
# 以保证在高DPI显示设备上图标和其他图形元素的清晰度。这对于那些使用像素图(如PNG或JPEG图像)作为界面元素的应用程序尤其有用
# QApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True)
QhShiPeiBeiShu = {
"3840" : 2,
}
# 获取屏幕分辨率(显示&物理)
QhXSwidth,QhXSheight,QhWLwidth,QhWLheight = QhGetScreenResolution()
if QhWLwidth>1920:
# 是否启动适配比例
import os
QhFd = int(QhWLwidth/QhXSwidth) # 计算缩放比例
# 设置QT_SCREEN_SCALE_FACTORS环境变量
if QhFd == 1:
QhFd0 = QhShiPeiBeiShu[str(QhWLwidth)]
os.environ["QT_SCREEN_SCALE_FACTORS"] = "{}".format(str(QhFd0))
elif QhFd > 1:
os.environ["QT_SCREEN_SCALE_FACTORS"] = "{}".format(str(QhFd))
# QApplication.setHighDpiScaleFactorRoundingPolicy(
# Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
# QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
# QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps)
QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True) # 适应高DPI设备
QApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True)
qh_app = QApplication(sys.argv) # 创建应用实例 # 创建应用实例
qh_MyWindows = QhAPPGUI() # 创建窗口实例
qh_MyWindows.show() # 显示窗口
qh_n = qh_app.exec() # 执行exec()方法,进入事件循环,如果遇到窗口退出命令,返回整数qh_n
print(qh_n) # 输出输出关闭事件返回的整数
try: # 捕获程序退出事件
sys.exit(qh_n) # 通知python系统,结束程序运行
except SystemExit:
print("请在此做一些其他工作。") # python解释器停止执行前的工作