pyqt实现自适应侧边栏动画


    def animation_sidebar(self):
        self.m_bSideflag = False
        self.pushButton.setText("<<")
        self.pushButton.setStyleSheet("QPushButton:hover{color:green}   "
                                      "QPushButton{border:2px solid #19EE22; border-radius:60px}  "
                                      "QPushButton:pressed{background-color:rgb(25, 225, 125)}")
        self.side_Animation = QPropertyAnimation(self.widget_side, b"geometry", self)
        self.side_Animation.setEasingCurve(QEasingCurve.InOutSine)
        self.side_Animation.setDuration(500)
        self.view_Animation = QPropertyAnimation(self.groupBox_view, b"geometry", self)
        self.view_Animation.setEasingCurve(QEasingCurve.InOutSine)
        self.view_Animation.setDuration(500)

    @Slot()
    def on_pushButton_clicked(self):
        print(self.rect().width(), self.widget_side.width())
        if self.m_bSideflag:  # 隐藏->弹出
            self.side_Animation.setStartValue(
                QRect(-self.widget_side.width() + self.pushButton.width(), 0, self.widget_side.width(),
                      self.widget_side.height()))
            self.side_Animation.setEndValue(QRect(0, 0, self.widget_side.width(), self.widget_side.height()))
            self.side_Animation.start()

            self.view_Animation.setStartValue(
                QRect(0, 0, self.widget_side.width(), self.widget_side.height()))
            self.view_Animation.setEndValue(
                QRect(self.widget_side.width(), 0, self.widget_side.width(), self.widget_side.height()))
            self.view_Animation.start()
            self.pushButton.setText("<<")
            self.pushButton.setToolTip("隐藏侧边栏")
            self.m_bSideflag = False
            screen = QtGui.QGuiApplication.primaryScreen().availableGeometry()
            screen_size = QSize(screen.width() - self.widget_side.width(), screen.height())
        else:  # 弹出->隐藏
            self.side_Animation.setStartValue(QRect(0, 0, self.widget_side.width(), self.widget_side.height()))
            self.side_Animation.setEndValue(
                QRect(-self.widget_side.width() + self.pushButton.width(), 0, self.widget_side.width(),
                      self.widget_side.height()))
            self.side_Animation.start()

            self.view_Animation.setStartValue(
                QRect(self.widget_side.width(), 0, self.widget_side.width(), self.widget_side.height()))
            self.view_Animation.setEndValue(
                QRect(0, 0, self.widget_side.width(), self.widget_side.height()))
            self.view_Animation.start()
            self.pushButton.setText(">>")
            self.pushButton.setToolTip("显示侧边栏")
            self.m_bSideflag = True
            screen = QtGui.QGuiApplication.primaryScreen().availableGeometry()
            screen_size = QSize(screen.width(), screen.height())
        self.groupBox_view.setFixedSize(screen_size)#自适应界面
        self.widget_side.raise_()

PyQt实现一个带有蓝色背景的可折叠侧边栏界面组件,可以通过使用 `QSplitter`、`QWidget` 和 `QVBoxLayout` 等控件来完成。以下是一个完整的示例代码,展示如何创建一个具有蓝色背景的可折叠侧边栏。 ### 示例代码 ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QSplitter, QPushButton, QLabel from PyQt5.QtCore import Qt class CollapsibleSidebar(QWidget): def __init__(self): super().__init__() # 主布局 main_layout = QVBoxLayout(self) # 创建分割器 self.splitter = QSplitter(Qt.Horizontal) # 创建侧边栏 self.sidebar = QWidget() self.sidebar.setStyleSheet("background-color: blue;") # 设置蓝色背景 sidebar_layout = QVBoxLayout(self.sidebar) sidebar_label = QLabel("Sidebar") sidebar_label.setAlignment(Qt.AlignCenter) sidebar_layout.addWidget(sidebar_label) # 添加按钮用于展开/折叠侧边栏 self.toggle_button = QPushButton("Collapse") self.toggle_button.clicked.connect(self.toggle_sidebar) sidebar_layout.addWidget(self.toggle_button) # 创建主内容区域 self.main_content = QWidget() self.main_content.setStyleSheet("background-color: white;") main_content_layout = QVBoxLayout(self.main_content) main_label = QLabel("Main Content") main_label.setAlignment(Qt.AlignCenter) main_content_layout.addWidget(main_label) # 将侧边栏和主内容添加到分割器中 self.splitter.addWidget(self.sidebar) self.splitter.addWidget(self.main_content) # 设置初始宽度 self.splitter.setSizes([200, 600]) # 将分割器添加到主布局 main_layout.addWidget(self.splitter) def toggle_sidebar(self): # 获取当前侧边栏的宽度 current_width = self.sidebar.width() if current_width > 0: # 折叠侧边栏 self.splitter.setSizes([0, 800]) self.toggle_button.setText("Expand") else: # 展开侧边栏 self.splitter.setSizes([200, 600]) self.toggle_button.setText("Collapse") if __name__ == "__main__": app = QApplication(sys.argv) window = CollapsibleSidebar() window.resize(800, 600) window.show() sys.exit(app.exec_()) ``` ### 解释 1. **QSplitter**:使用 `QSplitter` 来管理侧边栏和主内容区域的布局。通过设置 `Qt.Horizontal` 方向,可以让两个区域水平排列。 2. **侧边栏样式**:通过 `setStyleSheet("background-color: blue;")` 方法为侧边栏设置蓝色背景。 3. **折叠/展开功能**:通过 `QPushButton` 控制侧边栏的展开和折叠。点击按钮时,调用 `toggle_sidebar` 方法,根据当前侧边栏的宽度决定是折叠还是展开。 4. **QSplitter.setSizes()**:该方法用于设置侧边栏和主内容区域的宽度。当侧边栏宽度为 0 时,表示折叠状态;当宽度大于 0 时,表示展开状态。 5. **动态按钮文本**:根据侧边栏的状态,按钮的文本会在 "Collapse" 和 "Expand" 之间切换。 ### 扩展功能 - **动画效果**:可以为侧边栏的展开和折叠添加平滑的动画效果,提升用户体验。 - **多级菜单**:可以在侧边栏中添加多个按钮或菜单项,实现更复杂的导航功能。 - **响应式设计**:可以根据窗口大小自动调整侧边栏和主内容区域的宽度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值