Я пытаюсь настроить графический интерфейс, который будет включать несколько страниц в PyQt5. Окно будет иметь минимальный размер 800x600, но его можно настраивать и дальше. Я хочу, чтобы большинство, но не все элементы в окне масштабировались вместе с ним. У меня уже есть решение, но я чувствую, что оно не очень элегантное.
Вот пример окна 800x600:
![enter image description here](https://i.stack.imgur.com/dezAG.png)
А вот еще один пример после масштабирования
![enter image description here](https://i.stack.imgur.com/4CdB0.png)
Я пытался использовать QVBoxLayout, но с этой системой мне не удается сохранить макет, как он есть здесь (не говоря уже о том, что это невозможно), а все виджеты становятся центрированными и одинаковой ширины. Позже я мог бы также посмотреть на добавление виджетов к той стороне, которая будет иметь то же значение y, что и некоторые из существующих виджетов, что является другой вещью, которую я не уверен, как делать с макетом блока. .
Вот соответствующий код:
class CreatePage(QWidget):
def __init__(self, parent=None):
super().__init__()
self.initUI()
def initUI(self):
self.homeBtn = QPushButton("Home", self)
self.homeBtn.move(10, 10)
self.frontLabel = QLabel("Front", self)
self.frontLabel.setFont(QFont("Decorative", 20))
self.frontEdit = QTextEdit(self)
self.frontEdit.setFont(QFont("Decorative", 11))
self.backLabel = QLabel("Back", self)
self.backLabel.setFont(QFont("Decorative", 20))
self.backEdit = QTextEdit(self)
self.backEdit.setFont(QFont("Decorative", 11))
def paintEvent(self, e):
qp = QPainter()
qp.setFont(QFont("Decorative", 20))
size = self.size()
h = size.height()
w = size.width()
frontW = qp.fontMetrics().width("Front")
self.frontLabel.move((w/2) - (frontW/2) , h/15)
#I use fontMetrics to determine the width of the text
#I then use this information to centre the text
self.frontEdit.move(50, h/15 + 40)
self.frontEdit.resize(w-100, h/3)
backW = qp.fontMetrics().width("Back")
self.backLabel.move((w/2) - (backW/2), h/2)
self.backEdit.move(50, h/2 + 40)
self.backEdit.resize(w-100, h/3)
Извиняюсь за всеобщую небрежность, я новичок в PyQt и в целом в программировании GUI. В любом случае, формулы, которые я использовал для изменения размера и перемещения виджетов, совершенно произвольны. Кто-нибудь знает лучший способ достижения этого эффекта?