クリックすると拡大縮小するフレームがあります。2つのレイアウトがあります。1 つのレイアウトは、レイアウトが展開されるたびに表示される必要があり (コンテンツ レイアウト)、もう 1 つのレイアウトは、フレームが縮小された場合でも常に表示される必要があります (ヘッダー レイアウト)。
コンテンツ レイアウトは、水平方向にサイズ変更できるはずですが、垂直方向にサイズ変更することは想定されていません。
私はこれを試しましたが、うまくいきませんでした:
class AppDemo(QWidget):
def __init__(self):
super().__init__()
self.frame = QFrame()
self.frame.setStyleSheet("background: green; border-radius: 8px;")
self.frame_layout = QVBoxLayout()
self.frame.setLayout(self.frame_layout)
self.header_layout = QHBoxLayout()
self.header_layout.setAlignment(Qt.AlignTop)
self.content_layout = QVBoxLayout()
self.frame_layout.addLayout(self.header_layout)
self.frame_layout.addLayout(self.content_layout)
self.header_label = QLabel(u"Marvin sollte Programmieren lernen!")
self.header_layout.addWidget(self.header_label)
self.content_frame = QFrame()
self.content_frame.setStyleSheet("background: red; border-radius: 8px;")
self.content_frame.setFixedHeight(1000)
self.content_layout.addWidget(self.content_frame)
self.layout = QVBoxLayout()
self.setLayout(self.layout)
self.layout.addWidget(self.frame)
self.frame.mouseReleaseEvent = lambda _:self.resizeFrame()
def resizeFrame(self):
current_size = self.frame.geometry()
self.animation = QPropertyAnimation(self.frame, b"geometry")
self.animation.setDuration(500)
self.animation.setStartValue(current_size)
self.animation.setEndValue(QRect(current_size.x(), current_size.y(), current_size.width(), current_size.height() - 500))
self.animation.setEasingCurve(QEasingCurve.OutCubic)
self.animation.start()
参考までに、右のパネルをクリックしたときに、このウェブサイトで見られるような効果を実現したいと考えています。