Как я могу центрировать расширяющийся виджет, сохраняя его соотношение сторон? - PullRequest
0 голосов
/ 18 июня 2019

Я хочу создать виджет, который:

  • имеет минимальный размер (300 x 200) пикселей
  • Максимальный размер (1200 x 800) пикселей
  • Поддерживает соотношение сторон 1,5
  • Увеличивается или уменьшается при изменении размера окна
  • Остаётся горизонтально и вертикально центрированным

Приведенный ниже код выполняет первые четыре функции, но, как показано на рисунке ниже, этот код не поддерживает центрирование при настройке размера окна. Обратите внимание, что другие методы, такие как heightForWidth, не поддерживают соотношение сторон для всех размеров окна.

Как мне настроить свой код для достижения всех пяти функций, перечисленных выше?

enter image description here

import sys
from PyQt5 import QtWidgets, QtCore


class MyWidget(QtWidgets.QWidget):
    def __init__(self, *args):
        super().__init__(*args)
        self.setAttribute(QtCore.Qt.WA_StyledBackground)

    def sizeHint(self):
        return QtCore.QSize(1200, 800)

    def resizeEvent(self, event):
        h = event.size().height()
        w = event.size().width()
        s = 1.5
        if w > s*h:
            w = int(s*h)
        else:
            h = int(w/s)
        self.resize(w, h)


if __name__ == '__main__':
    app    = QtWidgets.QApplication(sys.argv)
    dlg    = QtWidgets.QDialog()

    widget = MyWidget()
    widget.setStyleSheet('background-color: rgb(1, 250, 1);')
    widget.setMinimumSize( QtCore.QSize(300, 200) )
    policy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
    widget.setSizePolicy(policy)

    layout = QtWidgets.QHBoxLayout()
    layout.addWidget(widget, 0, QtCore.Qt.AlignCenter)
    dlg.setLayout(layout)
    dlg.resize(600, 600)
    dlg.show()
    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...