有没有办法在Maya中用python制作这个(见图片)用户界面?

时间:2018-06-09 20:00:45

标签: python image user-interface maya

(click here for image) The UI I want to make with python

有没有办法在Maya中使用python创建这个UI? 我尝试了几种方法。 但无法获得信息'按钮下方和靠近全屏'按钮。 任何可以帮助我的提示或方法。 (我真的很想给出图像的像素位置。 但无法找到实现这一目标的方法。)

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

使用循环或函数来创建一个" row部分"代码可能不那么长,但我希望这会给你一个想法。

答案 1 :(得分:0)

rowLayout
         -> rowLayout
               -> button
               -> columnLayout -> button
                               -> button

这是您的一个小部件的布局,另外两个按钮

如果你想要一个类似的话题,我已经更深入地描述了这个话题: Not getting expected output in Maya python scripting for gui