Это довольно легко сделать в PySide
, который также поставляется с Maya.
Вы не должны устанавливать положение в пикселях, потому что, поверьте мне, это будет огромной проблемой, если выкогда-либо нужно изменить его.Это также не изменило бы размер окна правильно, если вы жестко закодировали свой интерфейс.Вместо этого вам нужно использовать вложенные макеты:
verticalLayout
horizontalLayout
button
verticalLayout
fullScreenButton
infoButton
.. do the same as above for other 2 main buttons
Пример будет выглядеть примерно так:
from PySide2 import QtWidgets
class Window(QtWidgets.QDialog):
def __init__(self):
QtWidgets.QDialog.__init__(self)
# The width of the buttons on the side.
side_width = 30
self.button_1 = QtWidgets.QPushButton("BAKE ANIMATION", parent=self)
self.button_1.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) # Make it stretchable vertically and horizontally.
self.full_screen_1 = QtWidgets.QPushButton("[ ]", parent=self)
self.full_screen_1.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding) # Make it stretchable only vertically.
self.full_screen_1.setFixedWidth(side_width) # Give it a fixed width.
self.info_1 = QtWidgets.QPushButton("i", parent=self)
self.info_1.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)
self.info_1.setFixedWidth(side_width)
# Vertical layout for fullscreen and info buttons.
self.side_layout_1 = QtWidgets.QVBoxLayout()
self.side_layout_1.addWidget(self.full_screen_1)
self.side_layout_1.addWidget(self.info_1)
# Horizontal layout for main button and previous vertical layout.
self.sub_layout_1 = QtWidgets.QHBoxLayout()
self.sub_layout_1.addWidget(self.button_1)
self.sub_layout_1.addLayout(self.side_layout_1)
# Do the same for the 2nd section.
self.button_2 = QtWidgets.QPushButton("CONVERT TO\nSPECIAL KEYFRAME", parent=self)
self.button_2.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
self.full_screen_2 = QtWidgets.QPushButton("[ ]", parent=self)
self.full_screen_2.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)
self.full_screen_2.setFixedWidth(side_width)
self.info_2 = QtWidgets.QPushButton("i", parent=self)
self.info_2.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)
self.info_2.setFixedWidth(side_width)
self.side_layout_2 = QtWidgets.QVBoxLayout()
self.side_layout_2.addWidget(self.full_screen_2)
self.side_layout_2.addWidget(self.info_2)
self.sub_layout_2 = QtWidgets.QHBoxLayout()
self.sub_layout_2.addWidget(self.button_2)
self.sub_layout_2.addLayout(self.side_layout_2)
# Do the same for the 3rd section.
self.button_3 = QtWidgets.QPushButton("MAKE\nBREAKDOWN POSE", parent=self)
self.button_3.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
self.full_screen_3 = QtWidgets.QPushButton("[ ]", parent=self)
self.full_screen_3.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)
self.full_screen_3.setFixedWidth(side_width)
self.info_3 = QtWidgets.QPushButton("i", parent=self)
self.info_3.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)
self.info_3.setFixedWidth(side_width)
self.side_layout_3 = QtWidgets.QVBoxLayout()
self.side_layout_3.addWidget(self.full_screen_3)
self.side_layout_3.addWidget(self.info_3)
self.sub_layout_3 = QtWidgets.QHBoxLayout()
self.sub_layout_3.addWidget(self.button_3)
self.sub_layout_3.addLayout(self.side_layout_3)
# Add all sub layouts to a vertical layout.
self.main_layout = QtWidgets.QVBoxLayout()
self.main_layout.setSpacing(2) # Reduce spacing to make it look more like your image.
self.main_layout.addLayout(self.sub_layout_1)
self.main_layout.addLayout(self.sub_layout_2)
self.main_layout.addLayout(self.sub_layout_3)
self.setLayout(self.main_layout)
win = Window()
win.show()
код может быть менее длинным, используя циклы или функцию для создания «секции строк», но я надеюсь, что это даст вам представление.