跳转至

PyQt 适配不同屏幕分辨率

更新日期 2017-09-26
  • 2017-09-26 创建文档

在宽高为1366*768下设计开发的界面,到了2860*1620屏幕下会显示不正常。

因为像素密度不同,2860*1620屏幕显示出来的控件很小。

适配方法 - 根据当前屏幕调整控件大小和位置

初始化时获取到当前屏幕的宽高像素值。

与原像素值相比求出比例self.ratio_widself.ratio_height

找出所有的QWidget self.findChildren(QWidget),遍历来改变大小和位置。

from PyQt4.QtGui import QMainWindow, QApplication, QWidget

class ReMainWindow(QMainWindow):

    def __init__(self, parent=None):
        # ...........
        self.app = QApplication.instance()  # Calculate the ratio. Design screen is [1366, 768]
        screen_resolution = self.app.desktop().screenGeometry()
        self.hw_ratio = 768 / 1366  # height / width
        self.ratio_wid = screen_resolution.width() / 1366
        if self.ratio_wid < 1:
            self.ratio_wid = 1
        self.ratio_height = screen_resolution.height() / 768
        if self.ratio_height < 1:
            self.ratio_height = 1

    def _init_ui_size(self):
        """ Travel all the widgets and resize according to the ratio """
        self._resize_with_ratio(self)
        for q_widget in self.findChildren(QWidget):
            # print q_widget.objectName()
            self._resize_with_ratio(q_widget)
            self._move_with_ratio(q_widget)

            # Don't deal with the text browser
            # for q_widget in self.findChildren(QAbstractScrollArea):
            #     print q_widget.objectName()
            #     self._resize_with_ratio(q_widget)
            #     self._move_with_ratio(q_widget)

    def _resize_with_ratio(self, input_ui):
        input_ui.resize(input_ui.width() * self.ratio_wid, input_ui.height() * self.ratio_height)

    def _move_with_ratio(self, input_ui):
        input_ui.move(input_ui.x() * self.ratio_wid, input_ui.y() * self.ratio_height)

实践发现,不需要对QTextBrowser所属的QAbstractScrollArea处理。

本站说明

一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。如有疑问和建议,欢迎在下方评论~

📖AndroidTutorial 📚AndroidTutorial 🙋反馈问题 🔥最近更新 🍪投喂作者

Ads