PyQt5实现侧面菜单栏-仿QQ设置--以及透明选中按钮效果(详细讲解)

这是我们要仿制的样式,甚至你可以在这个界面中弄更漂亮的界面效果

源码和UI文件都会开放的

这是我们实现的效果,可以看到切换页面的同时按钮会有被选中的感觉,这是通过label去实现的

下面开始教程

        

 用QtDesign设计一个界面,包含四个按钮和stackedWidget, 后边还要弄个label,这里页面就弄两页就算了,然后给按钮绑定槽函数

 绑定好后生成UI文件后,转成py文件格式,当然你如果是PySide6可以直接生成py文件

 生成好的py文件

class Ui_MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

初始化,这是写在同一个文件里边,我是不推荐这样做的一般界面和槽函数分开写,然后通过继承UI_MainWIndow来分开写,这个前几篇文章都是这样写的,有兴趣可以看看,由于我特别懒就写一块了。

if __name__ == "__main__":
        app = QApplication(sys.argv)
        window = Ui_MainWindow()
        window.show()
        sys.exit(app.exec_())

主入口,写完后再补充绑定的函数即可

    def ChangeTwo(self):
        self.stackedWidget.setCurrentIndex(0)

 这里0和1就是页面的页数切换,写完这里切换功能就完成了,要加上选中的效果就要用到我们的label了

self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setPixmap(QtGui.QPixmap("Text.png"))
        self.label.setGeometry(QtCore.QRect(0, 0, 691, 451))
        self.label.setScaledContents(True)
        self.label.setObjectName("label")

给label配上图片,要注意的是后边的setText要删掉不然就没图片了,图片和代码我会整合成一个压缩包。

最后通过修改label的位置按钮选中状态就完成了

    def ChangeOne(self):
        self.stackedWidget.setCurrentIndex(1)
        x = self.label.pos().x()
        y = self.label.pos().y()
        self.anim = QPropertyAnimation(self.label, b"geometry")
        self.anim.setDuration(100)
        self.anim.setStartValue(QRect(x, y, 3, 40))
        self.anim.setEndValue(QRect(42, 136, 3, 40))
        self.anim.start()

对应每个槽函数的位置填写对应的x,y就好了

 写完后可以看到Text3是有一个选中的效果,这只是对label移动其中一个例子而已,最后通过修改按钮的样式改成透明

self.pushButton_2.setStyleSheet("QPushButton{\n"
                                        "    color:gray;\n"
                                        "    border-radius: 4px;\n"
                                        "    font: 9pt \"Microsoft YaHei\";\n"
                                        "    background:transparent;\n"
                                        "    border:1px;\n"
                                        "    border-right: transparent;\n"
                                        "}\n"
                                        "QPushButton:pressed{\n"
                                        "    background:rgb(169, 169, 169, 60);\n"
                                        "}")

修改样式后就可以得到透明的效果

 

 这里的图片可以由自已决定

代码和图片就放Q群了954736632

 

 后边考完试会出一个PyDracula的教程,说实话这个抽屉弹出来的动画很好看,PyDracula的代码可以在GitHub和群下到