PySideでUI作るときのテンプレート

プロンプトの勉強になった

```
# -*- coding: utf-8 -*-
from maya import OpenMayaUI
from PySide2 import QtWidgets, QtCore
import shiboken2 as shiboken
import maya.cmds as cmds

class MyToolUI(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(MyToolUI, self).__init__(parent)
        self.setWindowTitle("My Tool")
        self.setMinimumSize(400, 700)
        self.create_ui()
        self.create_connections()
        self.set_styles()

    def create_ui(self):
        main_layout = QtWidgets.QVBoxLayout(self)
        
        # メイングループボックス
        self.main_groupbox = self.create_main_groupbox()
        main_layout.addWidget(self.main_groupbox)

        # その他のウィジェット
        self.textedit = QtWidgets.QTextEdit()
        main_layout.addWidget(QtWidgets.QLabel("TextEdit:"))
        main_layout.addWidget(self.textedit)

        # タブウィジェット
        self.tabwidget = self.create_tabwidget()
        main_layout.addWidget(QtWidgets.QLabel("TabWidget:"))
        main_layout.addWidget(self.tabwidget)

        # 追加のグループボックス
        self.groupbox1 = self.create_groupbox("Group Box 1", "Group 1 Button")
        self.groupbox2 = self.create_groupbox("Group Box 2", "Group 2 Button")
        main_layout.addWidget(self.groupbox1)
        main_layout.addWidget(self.groupbox2)

        # Unused progressbar (kept for future reference)
        # self.progressbar = QtWidgets.QProgressBar()
        # self.progressbar.setValue(50)
        # main_layout.addWidget(QtWidgets.QLabel("ProgressBar:"))
        # main_layout.addWidget(self.progressbar)

    def create_main_groupbox(self):
        groupbox = QtWidgets.QGroupBox("Main Controls")
        layout = QtWidgets.QVBoxLayout()

        self.checkbox = QtWidgets.QCheckBox("Enable Option")
        self.radio1 = QtWidgets.QRadioButton("Option 1")
        self.radio2 = QtWidgets.QRadioButton("Option 2")
        self.combobox = QtWidgets.QComboBox()
        self.combobox.addItems(["Item 1", "Item 2", "Item 3"])
        self.lineedit = QtWidgets.QLineEdit()
        self.spinbox = QtWidgets.QSpinBox()
        self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)

        layout.addWidget(QtWidgets.QLabel("Checkbox:"))
        layout.addWidget(self.checkbox)
        layout.addWidget(QtWidgets.QLabel("Radio Buttons:"))
        radio_layout = QtWidgets.QHBoxLayout()
        radio_layout.addWidget(self.radio1)
        radio_layout.addWidget(self.radio2)
        layout.addLayout(radio_layout)
        layout.addWidget(QtWidgets.QLabel("Combobox:"))
        layout.addWidget(self.combobox)
        layout.addWidget(QtWidgets.QLabel("LineEdit:"))
        layout.addWidget(self.lineedit)
        layout.addWidget(QtWidgets.QLabel("SpinBox:"))
        layout.addWidget(self.spinbox)
        layout.addWidget(QtWidgets.QLabel("Slider:"))
        layout.addWidget(self.slider)

        groupbox.setLayout(layout)
        return groupbox

    def create_tabwidget(self):
        tabwidget = QtWidgets.QTabWidget()
        
        # Tab 1
        tab1 = QtWidgets.QWidget()
        tab1_layout = QtWidgets.QVBoxLayout(tab1)
        self.tab1_button = QtWidgets.QPushButton("Click Me")
        tab1_layout.addWidget(self.tab1_button)
        tabwidget.addTab(tab1, "Tab 1")

        # Tab 2
        tab2 = QtWidgets.QWidget()
        tab2_layout = QtWidgets.QVBoxLayout(tab2)
        self.tab2_checkbox = QtWidgets.QCheckBox("Tab 2 Option")
        tab2_layout.addWidget(self.tab2_checkbox)
        tabwidget.addTab(tab2, "Tab 2")

        return tabwidget

    def create_groupbox(self, title, button_text):
        groupbox = QtWidgets.QGroupBox(title)
        layout = QtWidgets.QVBoxLayout()
        button = QtWidgets.QPushButton(button_text)
        layout.addWidget(button)
        groupbox.setLayout(layout)
        return groupbox

    def create_connections(self):
        self.tab1_button.clicked.connect(self.on_tab1_button_click)
        self.groupbox1.findChild(QtWidgets.QPushButton).clicked.connect(self.on_groupbox1_button_click)
        self.groupbox2.findChild(QtWidgets.QPushButton).clicked.connect(self.on_groupbox2_button_click)

    def set_styles(self):
        self.setStyleSheet(
            '''
            QGroupBox {
                border: 2px solid #256d7b;
                border-radius: 6px;
                margin-top: 2em;
                font-size: 12px;
            } 

            QGroupBox::title {
                color: #fff;
                background-color: #256d7b;
                subcontrol-origin: margin;
                padding: 0.5em 0.7em;
                border-top-left-radius: 6px;
                border-top-right-radius: 6px;
            }
            '''
        )

    def on_tab1_button_click(self):
        cmds.warning("Tab 1 Button clicked!")

    def on_groupbox1_button_click(self):
        cmds.warning("Group Box 1 Button clicked!")

    def on_groupbox2_button_click(self):
        cmds.warning("Group Box 2 Button clicked!")

def maya_main_window():
    main_window_ptr = OpenMayaUI.MQtUtil.mainWindow()
    return shiboken.wrapInstance(int(main_window_ptr), QtWidgets.QWidget)

def show_ui():
    ui = MyToolUI(parent=maya_main_window())
    ui.show()

# UIを表示
if __name__ == "__main__":
    show_ui()
```