How to create a custom QWidget?

I have code like this
from PySide2.QtCore import (QCoreApplication, QMetaObject, QObject, QPoint,
 QRect, QSize, QUrl, Qt)
 from PySide2.QtGui import (QBrush, QColor, QConicalGradient, a qcursor, QFont,
 QFontDatabase, QIcon, QLinearGradient, QPalette, QPainter, Qpixmaps,
QRadialGradient)
 from PySide2.QtWidgets import *
 from PySide2.QtCore import QPropertyAnimation, QRect,QTimer
 from PySide2.QtWidgets import QApplication,QWidget
 import sys

 def my_self(self, vertical, into,name_but):
 self.main_winow = QWidget(into)
self.main_winow.setObjectName(u"main_winow")
 self.verticalLayout = QVBoxLayout(self.main_winow)
self.verticalLayout.setObjectName(u"verticalLayout")
 self.click_me = QPushButton(self.main_winow)
self.click_me.setObjectName(name_but)
self.verticalLayout.addWidget(self.click_me)
 self.mini_window = QWidget(self.main_winow)
self.mini_window.setObjectName(u"mini_window")
 self.gridLayout = QGridLayout(self.mini_window)
self.gridLayout.setObjectName(u"gridLayout")
self.verticalLayout.addWidget(self.mini_window)
vertical.addWidget(self.main_winow)
 return self


 class Ui_MainWindow(object):
 def setupUi(self, MainWindow):
 if MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
 MainWindow.resize(800, 600)
MainWindow.setStyleSheet(u"")
 self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
 self.widget = QWidget(self.centralwidget)
self.widget.setObjectName(u"widget")
 self.widget.setGeometry(QRect(120, 30, 191, 461))
 self.verticalLayout_4 = QVBoxLayout(self.widget)
self.verticalLayout_4.setObjectName(u"verticalLayout_4")
my_self(self,self.verticalLayout_4 self.widget,u"click_me")
 self.text_label = QLabel(self.mini_window)
self.text_label.setObjectName(u"text_label")
 self.gridLayout.addWidget(self.text_label, 0, 0, 1, 1)
 self.widget_4 = QWidget(self.widget)
self.widget_4.setObjectName(u"widget_4")
 self.verticalLayout_2 = QVBoxLayout(self.widget_4)
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
 self.pushButton_2 = QPushButton(self.widget_4)
self.pushButton_2.setObjectName(u"pushButton_2")
self.verticalLayout_2.addWidget(self.pushButton_2)
 self.widget_5 = QWidget(self.widget_4)
self.widget_5.setObjectName(u"widget_5")
 self.gridLayout_2 = QGridLayout(self.widget_5)
self.gridLayout_2.setObjectName(u"gridLayout_2")
 self.label_2 = QLabel(self.widget_5)
self.label_2.setObjectName(u"label_2")
 self.gridLayout_2.addWidget(self.label_2, 0, 0, 1, 1)
self.verticalLayout_2.addWidget(self.widget_5)
self.verticalLayout_4.addWidget(self.widget_4)
 self.widget_6 = QWidget(self.widget)
self.widget_6.setObjectName(u"widget_6")
 self.verticalLayout_3 = QVBoxLayout(self.widget_6)
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
 self.pushButton_3 = QPushButton(self.widget_6)
self.pushButton_3.setObjectName(u"pushButton_3")
self.verticalLayout_3.addWidget(self.pushButton_3)
 self.widget_7 = QWidget(self.widget_6)
self.widget_7.setObjectName(u"widget_7")
 self.gridLayout_3 = QGridLayout(self.widget_7)
self.gridLayout_3.setObjectName(u"gridLayout_3")
 self.label_3 = QLabel(self.widget_7)
self.label_3.setObjectName(u"label_3")
 self.gridLayout_3.addWidget(self.label_3, 0, 0, 1, 1)
self.verticalLayout_3.addWidget(self.widget_7)
self.verticalLayout_4.addWidget(self.widget_6)
 self.verticalSpacer = QSpacerItem(20, 188, QSizePolicy.Minimum, QSizePolicy.Expanding)
self.verticalLayout_4.addItem(self.verticalSpacer)
 self.verticalLayout_4.setStretch(3, 1)
MainWindow.setCentralWidget(self.centralwidget)
 self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName(u"menubar")
 self.menubar.setGeometry(QRect(0, 0, 800, 21))
MainWindow.setMenuBar(self.menubar)
 self.statusbar = QStatusBar(MainWindow)
self.statusbar.setObjectName(u"statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
 # setupUi
 def retranslateUi(self, MainWindow):
 MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
 self.click_me.setText(QCoreApplication.translate("MainWindow", u"click_me", None))
 self.text_label.setText(QCoreApplication.translate("MainWindow", u"TextLabel", None))
 self.pushButton_2.setText(QCoreApplication.translate("MainWindow", u"test", None))
 self.label_2.setText(QCoreApplication.translate("MainWindow", u"TextLabel", None))
 self.pushButton_3.setText(QCoreApplication.translate("MainWindow", u"test", None))
 self.label_3.setText(QCoreApplication.translate("MainWindow", u"TextLabel", None))
 # retranslateUi
 class QtMainWindow(QMainWindow, Ui_MainWindow):
 def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
 self.click_me.setText('Hide `mini_window`) # +++
 self.click_me.clicked.connect(self.doAnimation) # +++
 QTimer.singleShot(10, self.size_mini_window) # +++
 def size_mini_window(self): # +++
 self.s = self.mini_window.size()
 def doAnimation(self): # +++
 if self.click_me.text() == 'Hide `mini_window`:
 self.anim = QPropertyAnimation(self.mini_window, b"size")
 self.anim.setDuration(1500) 
self.anim.setStartValue(self.s)
 self.anim.setEndValue(QSize(self.s.width(), 0))
self.anim.start()
 self.click_me.setText('Show `mini_window`)
else:
 self.anim = QPropertyAnimation(self.mini_window, b"size")
 self.anim.setDuration(1500) 
 self.anim.setStartValue(QSize(self.s.width(), 0))
self.anim.setEndValue(self.s)
self.anim.start()
 self.click_me.setText('Hide `mini_window`)


 StyleSheet = """
 #centralwidget QWidget QWidget,
 #centralwidget QWidget QWidget QWidget QWidget,
 #centralwidget QWidget QWidget QWidget QWidget QWidget QWidget,
 #centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget,
 #centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget{
background:#000;
color:#fff;
}


 #centralwidget QWidget,
 #centralwidget QWidget QWidget QWidget,
 #centralwidget QWidget QWidget QWidget QWidget QWidget,
 #centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget,
 #centralwidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget{
background:#fff;
color:#000;
}
"""

 if __name__ == '__main__':
 app = QApplication(sys.argv)

 app.setStyleSheet(StyleSheet) # <----- StyleSheet

 window = QtMainWindow()
window.show()
 sys.exit(app.exec_()

I'm trying to create a function Widget with custom settings inside which I can put any other widget, text, buttons, and after pressing the button to hide it
IZ2Kr.gif
But I have the code working correctly because I don't know how to get rid of the repetition of the names and how to update Konovko the entire template during the animation
April 7th 20 at 10:51
0 answer

Find more questions by tags PythonPySide