小白白也能学会的 PyQt 教程 —— QRadioButton 介绍以及基本使用

news2024/11/18 15:41:34

文章目录

  • 一、QRadioButton快速入门
    • 1. QRadioButton简介
    • 2. QRadioButton快速上手
  • 二、响应单选按钮点击事件
    • 1、信号和槽机制:
    • 2、创建槽函数来响应单选按钮点击:
    • 3、示例:执行特定操作或显示相关内容:
  • 三、单选按钮的常用功能和属性
    • 1、按钮状态的管理:
    • 2、设置按钮的大小、位置和布局:
    • 3、样式设置:
    • 4、其他常用属性:
  • 四、继承 QRadioButton 的自定义单选按钮
    • 1、继承 QRadioButton 类:
    • 2、重写按钮的行为:
    • 3、重写按钮的外观:
    • 4、使用自定义单选按钮:
    • 五、简单总结

一、QRadioButton快速入门

1. QRadioButton简介

QRadioButton是PyQt中用于创建单选按钮的类。它继承自QAbstractButton类,间接继承自QWidget类,因此可以像其他窗口部件一样进行布局和管理。

作为常用的小部件之一,QRadioButton可用于在用户界面中提供单选选项。它可以和其他QRadioButton进行组合,形成一组互斥的选项,即同一时间只能选择其中一个。QRadioButton具有丰富的功能和属性,可以设置文本标签、图标、默认选中状态,支持信号与槽机制,并可通过样式表进行自定义外观。

2. QRadioButton快速上手

使用QRadioButton的步骤大致分为以下三步:

  1. 创建单选按钮(创建单选按钮并添加到窗口)。
  2. 设置单选按钮的属性和样式(设置文本、图标、默认选中状态和样式)。
  3. 响应选择事件(连接选中状态变化的信号到特定的槽函数)。

1、创建单选按钮并添加到窗口:

使用以下代码可以创建一个简单的单选按钮并将其添加到窗口中:

from PyQt5.QtWidgets import QApplication, QMainWindow, QRadioButton

# 创建应用程序和主窗口
app = QApplication([])
window = QMainWindow()

# 创建单选按钮并设置父窗口
radio_button = QRadioButton("Option 1", window)

# 显示主窗口和应用程序循环
window.show()
app.exec()

在上述代码中,我们创建了一个应用程序实例和一个主窗口实例。然后,创建了一个名为 “Option 1” 的单选按钮,并将其父窗口设置为主窗口。最后,通过调用 show() 方法显示主窗口,并通过 app.exec() 进入应用程序的事件循环。

运行后效果如下:

请添加图片描述

2、设置单选按钮的属性和样式:

我们可以使用 setText() 方法为单选按钮设置文本,使用 setIcon() 方法设置单选按钮的图标。此外,还可以使用 setChecked() 方法设置单选按钮的默认选中状态。例如:

# 设置单选按钮的属性和样式
radio_button.setText("Option 1")
radio_button.setIcon(QIcon("icon.png"))
radio_button.setChecked(True)
radio_button.setStyleSheet("QRadioButton { color: blue; }")

上述代码将单选按钮的文本设置为 “Option 1”,将单选按钮的图标设置为 “icon.png” 文件,并将单选按钮设为默认选中状态。同时,通过使用样式表,将单选按钮的文本颜色设置为蓝色。

运行后效果如下:

请添加图片描述

3、连接选中状态变化的信号到特定的槽函数:

单选按钮的常见用途是在选择状态变化时执行特定的操作。为了实现这一点,我们可以使用信号和槽机制来连接单选按钮的选中状态变化信号到一个特定的槽函数。例如:

# 响应选择事件的槽函数
def on_radio_button_clicked():
    if radio_button.isChecked():
        print("Option 1 selected")

# 将选中状态变化信号与槽函数连接
radio_button.clicked.connect(on_radio_button_clicked)

在上述代码中,我们定义了一个名为 on_radio_button_clicked() 的槽函数,它将在单选按钮的选中状态变化时被调用,并打印出一条消息。然后,通过 clicked 信号和 connect() 方法,将单选按钮的选中状态变化信号连接到该槽函数。

运行后效果如下:

请添加图片描述

总体代码如下:

from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QMainWindow, QRadioButton

# 创建应用程序和主窗口
app = QApplication([])
window = QMainWindow()

# 创建单选按钮并设置父窗口
radio_button = QRadioButton("Option 1", window)

# 设置单选按钮的属性和样式
radio_button.setText("Option 1")
radio_button.setIcon(QIcon("icon.png"))
radio_button.setChecked(True)
radio_button.setStyleSheet("QRadioButton { color: blue; }")

# 响应选择事件的槽函数
def on_radio_button_clicked():
    if radio_button.isChecked():
        print("Option 1 selected")

# 将选中状态变化信号与槽函数连接
radio_button.clicked.connect(on_radio_button_clicked)

# 显示主窗口和应用程序循环
window.show()
app.exec()

二、响应单选按钮点击事件

1、信号和槽机制:

PyQt 使用信号和槽机制来处理用户界面组件的交互。信号是一个事件,如单选按钮的选中状态变化事件,而槽是一个接收信号并执行特定操作的函数。我们可以使用 connect() 方法将信号连接到槽函数,以便在特定事件发生时执行操作。

radio_button.clicked.connect()

2、创建槽函数来响应单选按钮点击:

在创建单选按钮时,我们可以通过定义一个槽函数来响应单选按钮的点击事件。槽函数是一个普通的Python函数,它接受特定的参数(例如,单选按钮点击事件的参数),并在函数体内执行所需的操作(特别注意,槽函数不能带有括号,否则会自动执行而导致错误)。就像下面的代码一样。

from PyQt5.QtWidgets import QApplication, QMainWindow, QRadioButton

def on_radio_button_clicked():
    if radio_button.isChecked():
        print("Option 1 selected")

app = QApplication([])
window = QMainWindow()
radio_button = QRadioButton("Option 1", window)

# 将单选按钮的选中状态变化信号连接到槽函数
radio_button.clicked.connect(on_radio_button_clicked)

window.show()
app.exec()

在上述代码中,我们定义了一个名为 on_radio_button_clicked() 的槽函数,它在单选按钮的选中状态变化时将打印一条消息。然后,通过调用 clicked 信号和 connect() 方法,将单选按钮的选中状态变化信号连接到该槽函数。

3、示例:执行特定操作或显示相关内容:

单选按钮的点击事件可以用于执行各种操作,例如更新界面内容、控制其他组件的状态或显示相关信息。以下是一个示例,展示了如何在单选按钮选中时执行特定操作:

from PyQt5.QtWidgets import QApplication, QMainWindow, QRadioButton, QMessageBox

def on_radio_button_clicked():
    if radio_button.isChecked():
        QMessageBox.information(window, "Message", "Option 1 selected")

app = QApplication([])
window = QMainWindow()
radio_button = QRadioButton("Option 1", window)
radio_button.clicked.connect(on_radio_button_clicked)

window.show()
app.exec()

在上述代码中,我们导入了 QMessageBox 类来显示消息框。on_radio_button_clicked() 槽函数将在单选按钮选中时调用 QMessageBox.information() 方法来显示包含消息的消息框。

通过连接单选按钮的选中状态变化信号到槽函数,您可以实现单选按钮与特定操作之间的交互。您可以根据需要扩展槽函数的功能,以便执行各种任务,从而增强用户界面的交互性和实用性。

运行效果如下:

请添加图片描述

三、单选按钮的常用功能和属性

在前两部分中,我们介绍了如何创建单选按钮和响应其点击事件。在本部分,我们将深入了解单选按钮的常用功能和属性,以便更好地定制和管理单选按钮的外观和行为。

1、按钮状态的管理:

单选按钮可以具有不同的状态,例如选中状态和未选中状态。您可以使用 setChecked() 方法来设置单选按钮的选中状态。例如:

radio_button.setChecked(True)  # 将单选按钮设置为选中状态
radio_button.setChecked(False)  # 将单选按钮设置为未选中状态

设置单选按钮的选中状态后,它将显示为选中或未选中状态。

2、设置按钮的大小、位置和布局:

您可以使用单选按钮的几个方法来设置其大小和位置,以及在用户界面中的布局。以下是一些常用方法的示例:

radio_button.setGeometry(50, 50, 100, 30)  # 设置单选按钮的位置和大小
radio_button.move(50, 50)  # 移动单选按钮到指定位置
radio_button.resize(100, 30)  # 调整单选按钮的大小

这些方法允许您自定义单选按钮在窗口中的位置和大小,以便与其他组件进行布局和排列。

3、样式设置:

单选按钮的外观可以通过使用样式表来进行自定义。您可以使用 setStyleSheet() 方法来设置单选按钮的样式。样式表使用QSS语法,可以为单选按钮设置背景颜色、文本颜色、边框样式等。以下是一个示例:

radio_button.setStyleSheet("QRadioButton { background-color: blue; color: white; }")

上述代码将单选按钮的背景颜色设置为蓝色,文本颜色设置为白色。您可以根据需要修改样式表以实现所需的外观效果。

下面是我列出的一些常用 QRadioButton 可用的 QSS 属性:

背景颜色属性:

  • background-color: 设置单选按钮的背景颜色。
  • pressed-background-color: 设置单选按钮在按下状态时的背景颜色。
  • hover-background-color: 设置鼠标悬停在单选按钮上时的背景颜色。

前景颜色属性:

  • color: 设置单选按钮的前景(文本)颜色。
  • pressed-color: 设置单选按钮在按下状态时的前景颜色。
  • hover-color: 设置鼠标悬停在单选按钮上时的前景颜色。

边框属性:

  • border: 设置单选按钮的边框样式。
  • border-radius: 设置单选按钮的边框圆角半径。
  • border-color: 设置单选按钮的边框颜色。

文本属性:

  • font: 设置

单选按钮的字体样式:

  • text-align: 设置单选按钮文本的对齐方式。

图标属性

  • icon: 设置单选按钮显示的图标。
  • icon-size: 设置单选按钮图标的大小。

尺寸属性:

  • min-width: 设置单选按钮的最小宽度。
  • min-height: 设置单选按钮的最小高度。
  • max-width: 设置单选按钮的最大宽度。
  • max-height: 设置单选按钮的最大高度。

4、其他常用属性:

  • text():获取单选按钮的文本内容。
  • setIcon():设置单选按钮的图标。
  • isChecked():检查单选按钮是否处于选中状态。
  • setDefault(True):将单选按钮设置为默认按钮。
  • setToolTip("Tooltip text"):设置单选按钮的工具提示文本,当鼠标悬停在单选按钮上时显示。

这些是单选按钮的常用功能和属性。通过使用这些功能和属性,您可以根据需要对单选按钮进行进一步定制,并管理其外观和行为。

四、继承 QRadioButton 的自定义单选按钮

PyQt 框架允许我们通过继承 QRadioButton 类来创建自定义单选按钮,以实现更复杂的功能和样式。在本部分,我们将学习如何创建自定义单选按钮,并重写其行为和外观。

1、继承 QRadioButton 类:

创建自定义单选按钮的第一步是创建一个新的类,继承自 QRadioButton 类。通过继承,我们可以访问父类的方法和属性,并根据需要添加自定义功能。

from PyQt5.QtWidgets import QRadioButton

class CustomRadioButton(QRadioButton):
    def __init__(self, text, parent=None):
        super().__init__(text, parent)

        # 添加自定义的初始化代码
        self.setCustomProperties()
        self.setCustomStyle()

    def setCustomProperties(self):
        # 添加自定义的属性设置
        pass

    def setCustomStyle(self):
        # 添加自定义的样式设置
        pass

2、重写按钮的行为:

通过在自定义单选按钮类中定义新的方法或重写父类的方法,我们可以实现单选按钮的自定义行为。例如,我们可以重写单选按钮的点击事件处理方法:

def mousePressEvent(self, event):
    if event.button() == Qt.LeftButton:
        print("Custom radio button clicked!")

    # 调用父类的方法以保留单选按钮的默认行为
    super().mousePressEvent(event)

在上述代码中,我们重写了 mousePressEvent() 方法,当左键点击单选按钮时,它将打印一条消息。我们还通过调用 super().mousePressEvent(event) 来保留单选按钮的默认行为。

3、重写按钮的外观:

您可以通过重写 paintEvent() 方法来自定义单选按钮的外观。该方法在单选按钮需要重新绘制时被调用。在方法体内,您可以使用 QPainter 类来绘制单选按钮的外观,例如绘制背景、文本和图标。以下是一个示例:

def paintEvent(self, event):
    painter = QPainter(self)
    painter.setRenderHint(QPainter.Antialiasing)

    # 自定义绘制代码
    # 绘制单选按钮的背景、文本和图标

    painter.end()

在上述代码中,我们创建了一个 QPainter 实例,并使用其方法来绘制单选按钮的外观。您可以使用各种绘图方法和属性来实现所需的外观效果。

4、使用自定义单选按钮:

创建自定义单选按钮后,您可以像使用普通单选按钮一样在应用程序中使用它。例如:

app = QApplication([])
window = QMainWindow()

custom_radio_button = CustomRadioButton("Custom Radio Button", window)
# 设置单选按钮的位置和大小、样式等

window.show()
app.exec()

上述代码提供了一个自定义 QRadioButton 的模板,您可以修改和填充代码来创建自

己的自定义单选按钮。通过创建自定义单选按钮,您可以实现更复杂的功能和更具个性化的外观。您可以根据需要重写单选按钮的其他方法和添加其他自定义功能,以实现特定的行为和交互。

通过这个模板,我们创建了一个自定义单选按钮 CustomRadioButton 的实例,并将其添加到主窗口中。代码及效果如下:

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPainter, QColor, QPen
from PyQt5.QtWidgets import QRadioButton, QApplication


class StylishRadioButton(QRadioButton):
    def __init__(self, text, parent=None):
        super().__init__(text, parent)

        # 添加自定义的初始化代码
        self.setCustomProperties()
        self.setCustomStyle()

    def setCustomProperties(self):
        # 添加自定义的属性设置
        self.setFixedSize(150, 50)

    def setCustomStyle(self):
        # 添加自定义的样式设置
        self.setStyleSheet(
            '''
            QRadioButton {
                background-color: #fca311;
                color: #ffffff;
                border: none;
                border-radius: 10px;
                font-size: 16px;
            }

            QRadioButton:hover {
                background-color: #e5a634;
            }

            QRadioButton:pressed {
                background-color: #d18925;
            }
            '''
        )

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            print("Custom radio button clicked!")

        # 调用父类的方法以保留单选按钮的默认行为
        super().mousePressEvent(event)

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.setPen(QPen(QColor("#14213d"), 2))  # 设置边框颜色和宽度
        painter.setBrush(QColor("#fca311"))  # 设置背景颜色
        painter.drawEllipse(self.rect().center(), 15, 15)  # 绘制圆形
        painter.drawText(self.rect(), Qt.AlignCenter, self.text())

        painter.end()


if __name__ == '__main__':
    app = QApplication([])
    radio_button = StylishRadioButton("Choose Me")
    radio_button.show()
    app.exec()

五、简单总结

在使用 PyQt 框架开发应用程序时,掌握按钮的用法是至关重要的。按钮不仅仅是一个简单的界面元素,它承担着用户与应用程序交互的重要角色。通过充分利用按钮的功能和定制选项,我们可以创造出令用户满意的用户界面。

希望本博客能够帮助读者理解 PyQt 按钮的基本知识和用法,并激发他们进一步探索和实践的兴趣。祝愿读者在使用 PyQt 框架时能够灵活运用按钮,并开发出出色的用户界面。

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

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

相关文章

三维形体投影面积

🎈 算法并不一定都是很难的题目,也有很多只是一些代码技巧,多进行一些算法题目的练习,可以帮助我们开阔解题思路,提升我们的逻辑思维能力,也可以将一些算法思维结合到业务代码的编写思考中。简而言之&#…

petalinux 生成SDK报错排除

AAA: 在项目文件下新建Qt5文件夹文件夹内新建文件并且设置对应参数 文件夹路径: project-spec/meta-user/recipes-qt/qt5 新建文件 vim ./qt5/qt3d_%.bbappend vim ./qt5/qtquickcontrols2_%.bbappend vim ./qt5/qtserialbus_%.bbappend 文件内容 qt3d_%.bbap…

完美解决Non-terminating decimal expansion; no exact representable decimal result.异常

我们在使用BigDecimal进行精确计算时常常会出现Non-terminating decimal expansion; no exact representable decimal result.异常。 出现这个异常的原因在于 BigDecimal 是不可变的、任意精度的有符号十进制数,所以可以做精确计算。但在除法中,准确的商…

ernie-layout笔记

1: 识别文档中文字以及准确的对这些文字排序是必须的一步骤 采用 OCR技术识别文字以及对应的图像坐标信息,光栅扫描以生成输入序列按照从左到右,从上到下的顺序;但是以上方法针对复杂的结构就会出现问题;因此文章使用了Document-P…

Spring源码核心剖析 | 京东云技术团队

前言 SpringAOP作为Spring最核心的能力之一,其重要性不言而喻。然后需要知道的是AOP并不只是Spring特有的功能,而是一种思想,一种通用的功能。而SpringAOP只是在AOP的基础上将能力集成到SpringIOC中,使其作为bean的一种&#xff…

算法程序设计 之 循环赛日程表(2/8)

一、实验目的: 理解并掌握分治算法的基本思想和设计步骤。 二、实验内容 设有n个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次; (2&#xff0…

HOOPS Web SDK 2023 Crack

在 HOOPS WEB 平台上释放 3D 的力量 HOOPS Web 平台加速 Web 应用程序开发,提供先进的 3D Web 可视化、准确快速的 CAD 数据访问和 3D 数据发布软件开发工具包 (SDK)。 构建 3D WEB 应用程序 借助 HOOPS Web 平台,快速构建适用于…

值得收藏的 10个 Android 手机恢复丢失文件的工具榜单

尽管我们尽可能避免这种情况,但有时我们还是会不小心删除 Android 设备上的重要文件。无论是照片、视频、文档还是任何其他形式的数据,数据丢失都会带来巨大的痛苦。不幸的是,Android 设备没有内置恢复工具。但是,有一些第三方恢复…

里程碑式突破!关键的薛定谔猫编码能带来更好的量子比特

​ 薛定谔的猫编码插图(图片来源:网络) 来自瑞士洛桑联邦理工学院(EPFL)的科学家提出了一种突破性的量子计算容错方案,称为“关键的薛定谔猫编码”。这种新颖的系统在混合状态下运行,具有强大的…

容灾与备份区别、灾备技术、容灾体系规划

1.容灾备份的区别 容灾 (Disaster Tolerance):就是在上述的灾难发生时,在保证生产系统的数据尽量少丢失的情况下,保持生存系统的业务不间断地运行。 容错 (Fault Tolerance):指在计…

激光显示技术路线之争:超级全色激光技术ALPD5.0更先进

5月以来,智能投影市场爆发的激光显示技术路线之争愈演愈烈,各厂家带领自有的技术路线你方唱罢我登场,犹如一出愈演愈烈的大戏,吸引了业内外各界的目光。 从极米在5月10日2023春季新品发布会上率先向三色激光技术发难,再到坚果投影首席产品官在朋友圈发文炮轰极米的技术路线,随…

MarkDown常用功能

快捷键 撤销:Ctrl/Command Z 重做:Ctrl/Command Y 加粗:Ctrl/Command B 斜体:Ctrl/Command I 标题:Ctrl/Command Shift H 无序列表:Ctrl/Command Shift U 有序列表:Ctrl/Command Shif…

【二叉树part01】| 二叉树的递归遍历、二叉树的迭代遍历、二叉树的统一迭代遍历

目录 ✿二叉树的递归遍历❀ ☞LeetCode144.前序遍历 ☞LeetCode145.二叉树的后序遍历 ☞LeetCode94.二叉树的中序遍历 ✿二叉树的迭代遍历❀ ☞LeetCode144.前序遍历 ☞LeetCode145.二叉树的后序遍历 ☞LeetCode94.二叉树的中序遍历 ✿二叉树的统一迭代遍历❀ ☞Lee…

CTFshow-pwn入门-前置基础pwn32-pwn34

FORTIFY_SOURCE FORTIFY_SOURCE(源码增强),这个其实有点类似与Windows中用新版Visual Studio进行开发的时候,当你用一些危险函数比如strcpy、sprintf、strcat,编译器会提示你用xx_s加强版函数。 FORTIFY_SOURCE本质上一种检查和替换机制&am…

算法程序设计 之 矩阵连乘(3/8)

一、实验目的: 理解动态规划算法的基本思想和设计步骤; 掌握动态规划算法的典型应用范例——矩阵连乘。 二、实验内容 矩阵连乘 给定n个可乘的数字矩阵A1,…,An,以及矩阵的阶p0* p1, p1* p2,…, pn-1* pn,求给定矩阵链的最优计算次序使得所需…

JavaWeb之文件的上传和下载

文章目录 文件的上传基本介绍文件上传的HTTP协议的说明commons-fileupload.jar 常用API介绍说明fileupload类库的使用 文件的下载基本介绍和使用说明中文名乱码问题解决方案 文件的上传和下载,是非常常见的功能。很多的系统中,或者软件中都经常使用文件的…

使用spacy做分词的示例

下载数据: aws s3 cp s3://applied-nlp-book/data/ data --recursive --no-sign-request aws s3 cp s3://applied-nlp-book/models/ag_dataset/ models/ag_dataset --recursive --no-sign-request 上面第一份数据接近1GB,第二份接近3GB; 示…

买了一年CSDN年VIP,用着实在太爽

买一年CSDN的年VIP有多爽及使用攻略! 一、前言 这段时间,一旦打开CSDN就不断的弹出618活动,在电脑网上打开,一股白嫖之的气息吹来,让人直接忍不住剁手 最后经过近5天的挣扎,我还是受不了CSDN的蛊惑&#…

【工具分享】批量多目录图片如何转换PDF,一次性转换多级目录批量的PDF的转换,合并,输出另存等问题

在工作中我们经常要对图片进行批量转换PDF,由于文件量比较多,目录比较深,工作量比较大比较耗时费力,今天我们分享的主要解决以下问题: 1、单张图片的转换PDF:一张图临时转一下 2、多张图片转换成PDF&…

(二叉树) 1382. 将二叉搜索树变平衡 ——【Leetcode每日一题】

❓1382. 将二叉搜索树变平衡 难度:中等 给你一棵二叉搜索树,请你返回一棵 平衡后 的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。如果有多种构造方法,请你返回任意一种。 如果一棵二叉搜索树中,每个节点…