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

news2024/9/20 16:50:17

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博客

# 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())

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1945541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端面试宝典【Javascript篇】【1】

欢迎来到《前端面试宝典》,这里是你通往互联网大厂的专属通道,专为渴望在前端领域大放异彩的你量身定制。通过本专栏的学习,无论是一线大厂还是初创企业的面试,都能自信满满地展现你的实力。 核心特色: 独家实战案例…

畅销款超声波眼镜清洗器该怎么选?2024年最强超声波清洗机推荐指南

眼镜是现代生活中不可或缺的物品,但许多人可能不清楚如何正确清洁眼镜。传统的清洁方法可能会对眼镜造成损害,例如使用普通肥皂或清水清洗时容易划伤镜片。为了解决这个问题,家用超声眼镜波清洗机应运而生。超声波清洗机通过超声波振动原理进…

昇思MindSpore 应用学习-CycleGAN图像风格迁移互换

日期 心得 昇思MindSpore 应用学习-CycleGAN图像风格迁移互换(AI代码学习) CycleGAN图像风格迁移互换 模型介绍 模型简介 CycleGAN(Cycle Generative Adversarial Network) 即循环对抗生成网络,来自论文 Unpaired Image-to-Image Trans…

小白0基础怎么快速写一篇激光SLAM论文

大家好呀,我是一个SLAM方向的在读博士,深知SLAM学习过程一路走来的坎坷,也十分感谢各位大佬的优质文章和源码。如有不对的地方欢迎指出,欢迎各位大佬交流讨论,一起进步。博主创建了一个科研互助群Q:9510262…

视频翻译保留原音色pyvideotrans+clone-voice

剪映的视频翻译时长限制5分钟以内,需要积分2700首次有减免大概21.6元(1秒9积分/1元100积分) • 视频翻译配音工具pyvideotrans 将视频从一种语言翻译为另一种语言,并添加配音 打包链接:夸克网盘分享 升级补丁&#…

三、基础语法1(30小时精通C++和外挂实战)

三、基础语法1(30小时精通C和外挂实战) 1,开发环境的搭建2,cin和cout3、4,函数重载5,使用IDA分析exe6.1,默认参数6.2,默认参数的本质汇编7,externC1作用8,ext…

防御和进攻编程

防御性编程是许多程序员都听说过的一个术语,对于某些程序,防御性编程是必不可少的。对于其他程序,它可能偶尔使用一下。除此之外,还有攻击性编程。 在本文中,我们将首先研究“正常编程”。我们首先研究它,…

android(安卓)最简单明了解释版本控制之MinSdkVersion、CompileSdkVersion、TargetSdkVersion

1、先明白几个概念 (1)平台版本(Android SDK版本号) 平台版本也就是我们平时说的安卓8、安卓9、安卓10 (2)API级别(API Level) Android 平台提供的框架 API 被称作“API 级别” …

Mongodb的通配符索引

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第95篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关…

Blender 4.2 安装GIS插件步骤

Blender 4 更新以后插件安装变得复杂,插件界面的安装按钮不显示,界面布局改变,怎么安装插件: 1. 在线安装: “编辑”(Edit)>进入偏好设置(Preferences setting)>…

文件粉碎销毁 硬盘粉碎销毁 废弃的文件如何销毁

废弃的文件可以采用多种方法进行销毁,具体取决于文件的敏感性和数量。以下是一些常见的废弃文件销毁方法: 1. 机械粉碎:这是一种常见的方法,尤其适用于含有敏感信息的文件。可以使用碎纸机将文件切碎,对于小批量的资料…

Python新手如何制作植物大战僵尸?这篇文章教会你!

引言 《植物大战僵尸》是一款非常受欢迎的塔防游戏,玩家需要种植各种植物来抵御僵尸的进攻。在这篇文章中,我们将使用Python编写一个简化版的植物大战僵尸游戏,以展示如何使用Python创建游戏。 游戏规则 玩家将种植不同类型的植物来防御僵尸…

微软“蓝屏”事件:对全球IT基础设施韧性与安全性的深刻反思

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

【ai】windows ollama安装qwen

可以直接github下载,或者官方网站下载:参考大神的介绍当前最新0.28安装windows的预览版本,出现一个服务? 直接跑会TLS超时? 配置代理 export https_proxy=http://192.168.50.65:7890 export http_proxy

JavaWeb笔记_Session

Session概述 Session是一种在服务端记录用户会话信息的技术 Session的创建和获取 /*** HttpServletRequest对象中的方法:* public HttpSession getSession()* 如果当前服务端没有session,那就在服务端新建一个session对象* 如果在服务端有这个session,那么就直…

【C++】类和对象之继承

目录 继承的概念和定义 继承的概念 继承的定义 继承的定义格式 继承关系和访问限定符 继承基类成员访问方式的变化 访问权限实例 基类和派生类对象赋值转换 继承中的作用域 派生类的默认成员函数 继承与友元 继承与静态成员 复杂的菱形继承及菱形虚拟继承 继承的…

别再只知道埋头苦学python了!!学了python后月入1w不在话下,不准你还不知道!!!

在Python接单的过程中,掌握一些技巧、注意相关事项以及选择合适的接单平台是非常重要的 一、Python接单要注意哪些 报酬问题:在接单前,务必明确客户所说的报酬是税前还是税后,以避免后期产生纠纷。时间管理:不要与客户…

nacos get changed dataId error, code: 403

nacos get changed dataId error, code: 403问题解决 问题出现原因:解决办法:需要在运行项目的配置添加权限账号和密码,重启服务 问题出现原因: 由于nacosserver开启了权限验证,项目启动时出现异常 nacos.core.auth.caching.ena…

Java基础06:变量,常量,作用域(狂神说Java)

一.变量 有了static,即类变量,就可以不用new了可以直接调用,类变量之后再细讲 二.常量 三.变量的命名规范

权限(linux)

权限就是文件权限(linux万物皆文件) 本文主要涉及文件/文件夹权限 涉及指令: shell: kernal : linux内核 shell : 外壳 shell可以方便交互与操作 bash是一个具体的shell su su 切换用户 su -root 变…