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())
相关推荐
苏三有春3 天前
PyQt5实战——UTF-8编码器UI页面设计以及按钮连接(五)
python·pyqt
充值内卷4 天前
PyQt入门指南三十六 QInputDialog输入对话框组件
开发语言·python·pyqt
yava_free5 天前
用PyQt 5 开发的雷达基数据可视化软件
python·pyqt
充值内卷7 天前
PyQt入门指南三十五 QAction动作组件
linux·python·pyqt
星寂樱易李9 天前
python--pyQt 单选按钮控件 -QRadioButton
开发语言·python·pyqt
彭祥.11 天前
点云标注工具开发记录(四)之点云根据类别展示与加速渲染
pyqt·opengl
love_songming12 天前
Pyside6 布局管理器(3)--- QGridLayout的使用
开发语言·python·pyqt·pyside6
痛&快乐着13 天前
python-PyQt项目实战案例:制作一个视频播放器
python·pyqt
goomind13 天前
YOLOv8实战野生动物识别
人工智能·python·yolo·目标检测·pyqt
goomind18 天前
YOLOv8实战人脸-口罩检测与识别【数据集+YOLOv8模型+源码+PyQt5界面】
人工智能·yolo·目标检测·视觉检测·pyqt