Как и в другом ответе, вы можете просто использовать Stretch, НО ... вы также можете использовать его в сочетании с различными типами блоков как таковыми:
VCntnr-1 = QVBoxLayout()
VCntnr-1.addWidget(Button1)
VCntnr-1.addWidget(Button2)
VCntnr-1.addStretch(1)
HCntnr-1 = QHBoxLayout()
HCntnr-1.addLayout(VCntnr-1)
HCntnr-1.addWidget(TextBox)
HCntnr-1.addStretch(1)
Это может привести к тому, что ваши кнопки и так будутстатически содержится в левом верхнем углу.Конечно, в зависимости от того, как вы хотите расположить левую сторону, возможно, она может содержать 2 QVBoxLayouts с некоторыми кнопками в первой Stretch и несколькими кнопками во второй
VCntnr-1 = QVBoxLayout()
VCntnr-1.addWidget(Button1)
VCntnr-1.addWidget(Button2)
VCntnr-2 = QVBoxLayout()
VCntnr-2.addWidget(Button3)
VCntnr-2.addWidget(Button4)
VCntnr-3 = QVBoxLayout()
HCntnr-3.addLayout(VCntnr-1)
HCntnr-3.addStretch(1)
HCntnr-3.addLayout(VCntnr-2)
HCntnr-1 = QHBoxLayout()
HCntnr-1.addLayout(VCntnr-1)
HCntnr-1.addWidget(TextBox)
HCntnr-1.addStretch(1)
Таким образом, контейнеры вместе с Stretches - это то, чтоиспользуются для динамической и статической компоновки макета, который вы пытаетесь достичь, поэтому не зацикливайтесь на одном макете блока, используйте блоки разумно для достижения ваших целей.Существует также GridLayout, который можно использовать.
Теперь я поместил одну кнопку внутри QHBoxLayout вместе со Stretch, чтобы разместить ее слева или справа от его непосредственного контейнера, и я использовал пустые метки какПроставки (хотя я думаю, что в pyqt5 есть нечто, называемое «Spacer?»), Чтобы разместить некоторое свободное пространство между меткой и связанным с ней объектом.Так что это все о творческом использовании всех кусочков и кусочков для визуализации эстетики, которую вы пытаетесь достичь.
Обратите внимание, что вышеприведенные отступы для простоты чтения и должны быть удалены в коде.