PyQt - 针对不同的屏幕分辨率进行调整

标签 pyqt pyqt5 screen-resolution qt-designer

这个问题在这里已经有了答案:





PyQt GUI size on high resolution screens

(2 个回答)


2年前关闭。




我在分辨率为 3840x2160 的计算机上使用 PyQt 开发了一个应用程序。我使用 QtDesigner 创建了我几乎所有的 UI 需求,然后在 python 中手动添加了一些我需要的其他东西。一旦我去部署应用程序,我意识到目标计算机的分辨率为 1920x1080。应用程序中的一些小部件(通常是那些只有文本/按钮的小部件)很好,但是一旦我开始使用更复杂的布局,事情就不会那么清楚了。具体来说,QLabels 和其他 QItems 相互重叠,图像沿其水平轴不成比例地缩放,并且对象之间的间距减小。以下是说明问题的几张图片。

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



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


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


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

高分辨率屏幕 - QtDesigner


低分辨率屏幕 - QtDesigner


如果我想利用 QtDesigner,在 PyQt 中处理多个屏幕分辨率的正确方法是什么?我知道我可以使用 QDesktopWidget.screenGeometry 检索屏幕分辨率,但是有什么方法可以一次缩放每个参数而不是手动更改每个项目?避免使用特定的“大小策略”会对此有所帮助吗?

最佳答案

如果问题更多是由于不同的 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 配合使用。

关于PyQt - 针对不同的屏幕分辨率进行调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43904594/

相关文章:

python - PyQt5:使用 QtDesigner,如何将信号与模块中定义的插槽/可调用对象连接起来

javascript - 使用 CSS 媒体查询选择 JavaScript 元素

python - PyQt5 QGraphicsPathItem 由 QPainter 绘制

python - PyQt 声子音频播放器

python - 更改销售额时生成左翼幻灯片动画

python - `QTextEdit` 光标在覆盖其 `dropEvent` 后卡住

python - PySide2 拖放功能不起作用

python - PyQt:Windows Vista/7 上 QTableView 中的 QStyledItemDelegate?

javascript - screen.width 与设备实际分辨率

user-interface - GUI 开发人员如何处理可变像素密度?