Есть ли способ сделать этот (см. Рисунок) пользовательский интерфейс в Maya с Python? - PullRequest
0 голосов
/ 09 июня 2018

(нажмите здесь для изображения) Интерфейс, который я хочу сделать с python

Есть ли способ сделать этот интерфейс в Maya с python?Я пробовал пару методов.Но не могу получить кнопку «Информация» под и близко к кнопке «полный экран».Любые советы или методы, которые могут мне помочь.(Мне бы очень хотелось просто указать пиксельные позиции для изображений. Но я не могу найти способ, чтобы это произошло.)

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

Это довольно легко сделать в 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()

The result

код может быть менее длинным, используя циклы или функцию для создания «секции строк», но я надеюсь, что это даст вам представление.

0 голосов
/ 14 июня 2018
rowLayout
         -> rowLayout
               -> button
               -> columnLayout -> button
                               -> button

Это макет для одного из ваших виджетов кнопки с двумя другими

, если вы хотите подобную тему, где я описал это более подробно: Не получен ожидаемый результатв Maya Python для GUI

...