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和群下到

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的 PyQT5 代码示例,用于优化按钮点击效果: ```python from PyQt5.QtCore import Qt from PyQt5.QtGui import QPainter, QColor from PyQt5.QtWidgets import QApplication, QWidget, QPushButton class MyButton(QPushButton): def __init__(self, parent=None): super(MyButton, self).__init__(parent) self.setMouseTracking(True) self.setStyleSheet("QPushButton{background-color: #00bfff; color:#ffffff; border-radius: 10px; padding: 10px;}" "QPushButton:hover{background-color:#1e90ff;}" "QPushButton:pressed{background-color:#0080ff;}") self.radius = 10 self.color = QColor('#00bfff') def enterEvent(self, event): self.color = QColor('#1e90ff') self.update() def leaveEvent(self, event): self.color = QColor('#00bfff') self.update() def paintEvent(self, event): painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) painter.setPen(Qt.NoPen) painter.setBrush(self.color) rect = self.rect() painter.drawRoundedRect(rect, self.radius, self.radius) painter.setPen(QColor("#ffffff")) painter.drawText(rect, Qt.AlignCenter, self.text()) class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('优化按钮点击效果') button = MyButton("点击我") button.setGeometry(50, 50, 200, 50) self.setGeometry(300, 300, 300, 200) self.show() if __name__ == '__main__': app = QApplication([]) ex = Example() app.exec_() ``` 这个 PyQT5 示例创建了一个自定义按钮类 MyButton,它继承自 QPushButton,并重写了一些方法来实现优化的按钮点击效果。在这个示例中,我们使用了鼠标跟踪事件来检测按钮的进入和离开事件,并使用 QPainter 来绘制按钮的圆角矩形形状和文本。我们还使用了样式表来设置按钮的颜色和样式,以及按钮的悬停和按下效果。最后,我们创建了一个示例窗口,并在其中添加了 MyButton。 运行代码,将看到一个带有优化点击效果按钮

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值