PySide(PyQt),自定义图标按钮

1、在Qt Designer中新建画面,并放置3个按钮(QPushButton)和一个分组框(QGroupBox)小部件,分别命名为btn_1,

btn_2,btn_3和btnStation。

2、将所有小部件的显示文字内容删除。

3、将按钮的宽高尺寸改为50*50,分组框的宽高尺寸改为90*170,并将按钮拖入分组框。如图:

4、使用画图软件绘制图标,这里是使用的32*32,同一图标存为彩色和灰度两种格式。

下面是其中的一个样例:

放大图:

1:1原图:

5、回到Qt Designer,点击"编辑资源"按钮

6、 在弹出窗口中点击"新建资源文件"按钮

新建资源文件,命名为buttons.qrc

点击"添加前缀"按钮,命名为btn_img

点击"添加文件"按钮,选择并添加之前创建的图标文件

至此,按钮图标的资源文件创建完毕。

7、为小部件设置图标样式表 :

其中一个按钮的样式表内容:

QPushButton{image:url(:/btn_img/icon_camera32.png);} /* 常态的样式表*/

QPushButton[activated="true"] { /*激活时的样式表*/

background-color:#9db6f9;

}

QPushButton:disabled{ /*禁用时的样式表*/

image:url(:/btn_img/icon_camera32_gray.png);

}

这里,给按钮自定义了一个特性:activated,当然也可以把activated换成和增加任何你需要的特性。

分组框的样式表内容:

QGroupBox{

border:2px solid #b6b6b6;

background-color:#e0e0e0;

}

设置完成后的显示:

8、使用uic工具和 RCC工具,将ui文件和图像资源转换成python的脚本文件.py

工具的教程参见:QT designer的安装+PyUIC 和 PyRCC_qt designer安装-CSDN博客

9、创建应用程序的主脚本,导入ui文件和图像资源并应用:

这个应用框架是我根据自己的使用习惯和能力范围创建的,你也可以根据自己的实际情况搭建框架。Pyside使用Qt Designer和uic工具的基本框架的demo-CSDN博客

python 复制代码
# encoding: utf-8
import os
import sys

# 获取当前脚本的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 将 UIS 文件夹的路径添加到 sys.path 中
uis_dir = os.path.join(current_dir, 'UIS')
sys.path.append(uis_dir)
from UIS import *


# 主画面类
class MainWindow(QMainWindow, buttons_demo_ui.Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.run()  # 初始化
        self.signal_slot()  # 信号和槽

    # 初始化
    def run(self):
        self.move(0, 0)
        self.show()  # 显示画面
        self.btn_station = self.btnStation.children()  # 按钮站

    # 画面层面的信号和槽
    def signal_slot(self):
        # 按钮站的槽函数
        def buttons_clicked(button):
            def one_btn_clicked():
                # 设置各个按钮的显示外观
                def set_styleSheet():
                    for b in self.btn_station:
                        b.setProperty('activated', False)
                        b.setStyleSheet(b.styleSheet())
                    button.setProperty('activated', True)
                    button.setStyleSheet(button.styleSheet())

                set_styleSheet()
                # 每个按钮的功能函数
                if button == mainWindow.btn_1:
                    pass
                elif button == mainWindow.btn_2:
                    pass
                elif button == mainWindow.btn_3:
                    pass

            return one_btn_clicked

        # 按钮站的信号连接
        for btn in self.btn_station:
            btn.clicked.connect(buttons_clicked(btn))


class Jobs:
    @staticmethod
    def Job_todo_1():
        pass

    @staticmethod
    def Job_todo_2():
        pass

    # 退出系统前的保存、清理、释放等操作
    @staticmethod
    def before_quit():
        if ui.windows:
            for w in ui.windows:
                w.close()


# 项目的定义
class UI(QObject):  # 将项目定义为QObject,用来管理项目级别的信号和变量

    def __init__(self):
        super().__init__()
        self.run()  # 初始化

    # 项目的初始化
    def run(self):
        # 项目层面的信号和槽
        def signal_slot():
            pass
            # 退出系统之前的操作
            app.aboutToQuit.connect(Jobs.before_quit)

        signal_slot()


# #############################主程序##################################
if __name__ == '__main__':
    app = QApplication(sys.argv)
    # 项目的实例化
    ui = UI()
    ui.windows = []  # 所有用到的窗口

    # 初始化画面
    mainWindow = MainWindow()  # 主画面实例化
    ui.windows.append(mainWindow)

    sys.exit(app.exec())
相关推荐
阳懿13 小时前
【新手指南】pyqt可视化远程部署deepseek7B蒸馏版模型
pyqt
总裁余(余登武)18 小时前
Python pyqt小技巧:默认打开某文件(即自动加载某文件)
pyqt
是刃小木啦~1 天前
3D空间曲线批量散点化软件V1.0正式发布,将空间线条导出坐标点,SolidWorks/UG/Catia等三维软件通用
c++·人工智能·pyqt
cclsdxs2 天前
PyQt组件间的通信方式
pyqt
XS303 天前
PyQt学习记录04——通过提升法绘制matplot图形
学习·pyqt
深蓝海拓5 天前
PySide(PyQT)的视图(QGraphicsView)范例(一) 基本框架
pyqt
恋恋西风5 天前
vtk 3D坐标标尺应用 3D 刻度尺
python·3d·vtk·pyqt
大学生毕业题目5 天前
毕业项目推荐:基于yolov8/yolov5/yolo11的田间杂草检测识别系统(python+卷积神经网络)
开发语言·人工智能·python·yolo·cnn·pyqt·田间杂草
寒页_7 天前
【PyQt5项目实战分享】基于YOLOv5的交通道路目标检测和数据分析软件
python·qt·yolo·目标检测·pyqt
深蓝海拓8 天前
PySide(PyQT)重新定义contextMenuEvent()实现鼠标右键弹出菜单
开发语言·python·pyqt