Как плавно скрыть Qwidget, чтобы родительский Qwidget также уменьшался? - PullRequest
0 голосов
/ 07 февраля 2020

Мне нужно, чтобы Qwidget "mini_window" изменил свою высоту на 0 при нажатии кнопки "click_me" и при повторном нажатии возвращается в исходное положение, а родительский Qwidget "main_winow" для обновления своего размера

Я пытался изменить максимальный размер "mini_window", но я не нашел такого параметра в QPropertyAnimation, поэтому я просто использовал (size)

Но после нажатия кнопки мой Qwidget main_winow остается тот же размер и кампания не изменилась.

Почему и как это исправить?

from PySide2.QtCore import (QCoreApplication, QMetaObject, QObject, QPoint,
    QRect, QSize, QUrl, Qt)
from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont,
    QFontDatabase, QIcon, QLinearGradient, QPalette, QPainter, QPixmap,
    QRadialGradient)
from PySide2.QtWidgets import *  
from PySide2.QtCore import QPropertyAnimation, QRect
from PySide2.QtWidgets import QApplication,QWidget
import sys
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(800, 600)
        MainWindow.setStyleSheet(u"#centralwidget QWidget QWidget,\n"
"#centralwidget QWidget QWidget QWidget QWidget,\n"
"#centralwidget QWidget QWidget QWidget QWidget QWidget QWidget{\n"
"background:#000;\n"
"color:#fff;\n"
"}\n"
"\n"
"\n"
"#centralwidget QWidget,\n"
"#centralwidget QWidget QWidget QWidget,\n"
"#centralwidget QWidget QWidget QWidget QWidget QWidget{\n"
"background:#fff;\n"
"color:#000;\n"
"}\n"
"\n"
"")
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.main_winow = QWidget(self.centralwidget)
        self.main_winow.setObjectName(u"main_winow")
        self.main_winow.setGeometry(QRect(50, 30, 141, 131))
        self.verticalLayout = QVBoxLayout(self.main_winow)
        self.verticalLayout.setObjectName(u"verticalLayout")
        self.click_me = QPushButton(self.main_winow)
        self.click_me.setObjectName(u"click_me")
        self.click_me.clicked.connect(self.doAnimation) 
        self.verticalLayout.addWidget(self.click_me)
        self.mini_window = QWidget(self.main_winow)
        self.mini_window.setObjectName(u"mini_window")      
        self.mini_window.setMaximumSize(QSize(16777215, 16777215))          
        self.gridLayout = QGridLayout(self.mini_window)
        self.gridLayout.setObjectName(u"gridLayout")
        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.verticalLayout.addWidget(self.mini_window)
        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)
    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"Text", None))
    def doAnimation(self):
        self.anim = QPropertyAnimation(self.mini_window, b"size")
        self.anim.setDuration(1000) #speed
        self.anim.setStartValue(QSize(16777215, 16777215))
        self.anim.setEndValue(QSize(16777215, 0))
        self.anim.start()
class QtMainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
if __name__ == '__main__':
    my = QApplication(sys.argv)
    window = QtMainWindow()
    window.show()
sys.exit(my.exec_())
...