Python获取Windows分辨率后如何使用f-string格式化输出?
Windows下Python获取屏幕分辨率并适配f-string输出方案
问题背景
现有基于ctypes的Windows分辨率获取代码可输出1920x1080格式的结果,需要调整为支持f-string格式化调用的形式,适配类neofetch工具的输出逻辑,同时寻求更稳定的分辨率获取方案。
原始代码:
# libraries import ctypes # get screen resolution user32 = ctypes.windll.user32 screensize = user32.GetSystemMetrics(0), 'x', user32.GetSystemMetrics(1) # list to store resolution and the x that is between them items = [] # add resolution to list for item in screensize: resolution = (str(item)) items.append(item) # print resolution for item in items: print(item, end='')
目标输出形式:
print(f'''Resolution: {screen_resolution}''') User: {getuser()}
最简修改方案
原有代码的列表拼接逻辑属于冗余实现,直接提取宽、高两个数值后用f-string拼接为目标字符串即可,可直接适配目标输出逻辑:
import ctypes import getpass # 提取分辨率宽高 user32 = ctypes.windll.user32 screen_width = user32.GetSystemMetrics(0) screen_height = user32.GetSystemMetrics(1) # f-string直接拼接为需要的分辨率字符串 screen_resolution = f"{screen_width}x{screen_height}" # 用户名获取函数 def getuser(): return getpass.getuser() # 目标格式输出 print(f"Resolution: {screen_resolution}") print(f"User: {getuser()}")
更优的分辨率获取方案
注意:直接调用GetSystemMetrics在系统开启DPI缩放(比如125%、150%缩放)时,拿到的是缩放后的逻辑分辨率,不是显示器真实物理分辨率,做类neofetch的系统信息工具时建议优先用以下两种方案:
- 方案1:原生ctypes实现,开启DPI感知获取真实分辨率
不需要额外安装依赖,手动开启进程的DPI感知等级后再调用系统接口,就能拿到准确的物理分辨率:import ctypes # 开启系统DPI感知,避免缩放导致分辨率数值不准 ctypes.windll.shcore.SetProcessDpiAwareness(1) user32 = ctypes.windll.user32 screen_width = user32.GetSystemMetrics(0) screen_height = user32.GetSystemMetrics(1) screen_resolution = f"{screen_width}x{screen_height}" - 方案2:使用第三方库
screeninfo,自动适配多显示器、DPI场景
如果你需要支持多显示器分辨率展示、不想手动处理Windows系统接口的边界兼容问题,可以直接用这个封装好的库,调用逻辑更简单。
安装命令:pip install screeninfo
调用示例:from screeninfo import get_monitors # 获取主显示器分辨率 primary_monitor = next(m for m in get_monitors() if m.is_primary) screen_resolution = f"{primary_monitor.width}x{primary_monitor.height}" # 如果要展示所有显示器分辨率,直接遍历拼接即可 # all_res = " | ".join([f"{m.width}x{m.height}" for m in get_monitors()])
内容的提问来源于stack exchange,提问作者justanormaluser
相关产品推荐
相关产品推荐

