PyQt - 调整不同屏幕分辨率

10

我使用PyQt在一台3840x2160的电脑上开发了一个应用程序。我使用QtDesigner来创建几乎所有的UI需求,然后手动在Python中添加了我需要的其他功能。当我想要部署这个应用程序时,我意识到目标电脑的分辨率是1920x1080。应用程序中的一些小部件(通常只有文本/按钮)很好,但是一旦我开始涉及到更复杂的布局,事情就不太清晰了。具体而言,QLabels和其他QItems重叠在一起,图像在其水平轴上比例失调,物体之间的间距减小。以下是几张说明问题的图片。

3480x2160屏幕(根据Windows缩放和布局为250%) 注意:这是我开发时看到的。

3480x2160屏幕(根据Windows缩放和布局为100%)

1920x1080屏幕(根据Windows缩放和布局为100%)

我还注意到,Qt Designer本身在转换到不同的屏幕分辨率时也有类似的问题(请参见附加的图像)。

高分辨率屏幕 - QtDesigner

低分辨率屏幕 - QtDesigner

如果我想利用QtDesigner处理多个屏幕分辨率,应该采取什么样的正确方式? 我知道可以使用QDesktopWidget.screenGeometry获取屏幕分辨率,但是否有一种方法可以同时缩放每个参数,而不是手动更改每个项目? 避免特定的“大小策略”是否有所帮助?


1
你能否检查一下这是否与Windows中配置的不同屏幕缩放有关(请参见http://www.pcworld.com/article/2953978/displays/use-windows-10s-individual-display-scaling-to-perfect-your-multi-monitor-setup.html)? - three_pineapples
您没错,屏幕缩放确实会影响应用程序的外观,但似乎这并不是解决方案。 - aoh
你说的“事情不够清晰”是什么意思?你要解决的确切问题是什么?图像具有固定的像素尺寸,通常会提供多个尺寸递增的图像,并缩小(因为缩小比放大看起来更好),最接近目标小部件尺寸的图像等于或大于。 - David Ching
谢谢您指出问题不够清晰;我已经更新了问题,更清楚地阐述了问题,但如果还有需要详细说明的地方,请告诉我。 - aoh
1个回答

7

如果问题与分辨率无关,而是与不同的dpi有关,您可以在创建QApplication(或任何其他Qt类)之前向应用程序添加以下行,告诉Qt使用高dpi缩放/像素图:

# Handle high resolution displays:
if hasattr(QtCore.Qt, 'AA_EnableHighDpiScaling'):
    QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True)
if hasattr(QtCore.Qt, 'AA_UseHighDpiPixmaps'):
    QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True)

我发现这样做可以使我的应用程序在我笔记本电脑(高dpi,高分辨率)和桌面电脑(普通dpi,1920x1080)之间切换时表现得相同(或者至少更相似)。

我不使用QtDesigner,所以我不知道这个建议与QtDesigner的兼容性如何。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接