PyQt5 – 改变被按下的按钮的颜色

下面我来为你详细讲解 Python 中 PyQt5 模块中的如何改变被按下的按钮的颜色,包括示例说明。

一、准备工作

在开始之前,我们需要按照以下步骤进行准备工作。

1.安装 PyQt 模块

在命令行中输入以下命令:

pip install pyqt5

2.导入 PyQt 模块

在代码文件中导入如下模块:

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

二、改变被按下的按钮的颜色

1.首先,在通过 QPushButton 创建按钮时,我们需要为其添加一个父组件,如下所示:

button = QPushButton(parent_widget)

其中,parent_widget 可以为 QWidget, QMainWindow 等父组件。

2.然后,我们需要通过创建一个自定义类,并继承自 QPushButton,重载其 paintEvent 方法来实现改变被按下的按钮的颜色,如下所示:

class ColorButton(QPushButton):
    def __init__(self, parent=None):
        super(ColorButton, self).__init__(parent)
        # 设置样式表,使按钮按下时改变颜色
        self.setStyleSheet("QPushButton:checked{background-color:red}")

    def paintEvent(self, event):
        if self.isDown():
            painter = QPainter(self)
            painter.setPen(QPen(Qt.black, 1, Qt.SolidLine))
            painter.setBrush(QBrush(Qt.red, Qt.SolidPattern))
            painter.drawRect(self.rect().adjusted(0, 0, -1, -1))
        else:
            QPushButton.paintEvent(self, event)

在这段代码中,我们重载了 paintEvent 方法,当按钮被按下时,就会在按钮上绘制一个红色的矩形,同时通过设置样式表,使按钮按下时改变颜色为红色。

3.最后,我们需要将自定义按钮添加到父组件中,如下所示:

color_button = ColorButton(parent_widget)

其中,parent_widget 可以为 QWidget, QMainWindow 等父组件。

三、示例说明

下面给出两个示例说明,分别演示了如何针对 QTabWidget 和 QMainWindow 中的按钮进行改变颜色的操作。

示例一:针对 QTabWidget 中的按钮进行改变颜色

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class ColorButton(QPushButton):
    def __init__(self, parent=None):
        super(ColorButton, self).__init__(parent)
        # 设置样式表,使按钮按下时改变颜色
        self.setStyleSheet("QPushButton:checked{background-color:red}")

    def paintEvent(self, event):
        if self.isDown():
            painter = QPainter(self)
            painter.setPen(QPen(Qt.black, 1, Qt.SolidLine))
            painter.setBrush(QBrush(Qt.red, Qt.SolidPattern))
            painter.drawRect(self.rect().adjusted(0, 0, -1, -1))
        else:
            QPushButton.paintEvent(self, event)

class MainWidget(QWidget):
    def __init__(self, parent=None):
        super(MainWidget, self).__init__(parent)
        self.init_ui()

    def init_ui(self):
        tabwidget = QTabWidget(self)
        tabwidget.setGeometry(50,50,200,200)

        for i in range(3):
            # 在 QTabWidget 中添加自定义按钮
            color_button = ColorButton(tabwidget) 
            color_button.setText(f"Tab{i+1}")
            tabwidget.addTab(color_button, f"Tab{i+1}")

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    mw = MainWidget()
    mw.show()
    sys.exit(app.exec_())

在这个示例中,我们创建了一个继承自 QWidget 的 MainWidget, 在 MainWidget 中创建了一个继承自 QTabWidget 的 tabwidget,并在其中添加了三个继承自 QPushButton 的 ColorButton, 分别对应三个 Tab,并设置其文字为 Tab1,Tab2 和 Tab3。

当我们运行以上程序并按下其中任意一个 ColorButton 按钮时都会变成红色。

示例二:针对 QMainWindow 中的按钮进行改变颜色

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class ColorButton(QPushButton):
    def __init__(self, parent=None):
        super(ColorButton, self).__init__(parent)
        # 设置样式表,使按钮按下时改变颜色
        self.setStyleSheet("QPushButton:checked{background-color:red}")

    def paintEvent(self, event):
        if self.isDown():
            painter = QPainter(self)
            painter.setPen(QPen(Qt.black, 1, Qt.SolidLine))
            painter.setBrush(QBrush(Qt.red, Qt.SolidPattern))
            painter.drawRect(self.rect().adjusted(0, 0, -1, -1))
        else:
            QPushButton.paintEvent(self, event)

class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        exit_act = QAction(QIcon('exit.png'), '&Exit', self)
        exit_act.setShortcut('Ctrl+Q')
        exit_act.setStatusTip('Exit application')
        exit_act.triggered.connect(qApp.quit)

        self.toolbar = self.addToolBar('Exit')
        self.toolbar.addAction(exit_act)

        self.statusBar().showMessage('Ready')

        # 在 QMainWindow 中添加自定义按钮
        color_button = ColorButton(self)
        self.setCentralWidget(color_button)
        self.setWindowTitle('Example')
        self.setGeometry(300, 300, 250, 150)

if __name__ == '__main__':
    app = QApplication([])
    example = Example()
    example.show()
    app.exec_()

在这个示例中,我们继承自 QMainWindow, 创建了一个 Example 窗口,在其中添加了一个继承自 QPushButton 的 ColorButton, 并将其设置为 CentralWidget。

当我们运行以上程序并按下 ColorButton 按钮时就会变成红色。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 – 改变被按下的按钮的颜色 - Python技术站

(0)
上一篇 2023年5月10日
下一篇 2023年5月10日

相关文章

  • PyQt5 – orientation() 方法 进度条

    PyQt5是基于Qt库的Python图形界面编程工具包。Qt是跨平台的C++应用程序开发框架,可以用于开发GUI应用程序、嵌入式设备应用程序、客户端/服务器应用程序和各种KDE桌面环境的应用程序。PyQt5提供了丰富的GUI组件和工具来开发Python图形界面,其中包含了进度条(QProgressBar)控件,并且该控件具有orientation()方法,可…

    python 2023年5月10日
    00
  • PyQt5 QDoubleSpinBox – 设置可能的值范围

    PyQt5是Python编程语言的一种GUI(图形用户界面)框架,提供了一系列用于创建用户界面的类和方法。其中QDoubleSpinBox是PyQt5中一种用于设置和显示双精度浮点数的用户界面控件。在使用QDoubleSpinBox控件时,常常需要设置其可能的值范围,本文将详细讲解如何使用PyQt5 QDoubleSpinBox控件设置可能的值范围的完整使用…

    python 2023年5月13日
    00
  • PyQt5 – 鼠标悬停时为不可编辑的组合框设置背景图片

    下面是详细的Python PyQt5关于“鼠标悬停时为不可编辑的组合框设置背景图片”的使用攻略: 1. PyQt5安装和基础知识 首先需要安装PyQt5,可以通过pip安装,在终端输入以下命令即可: pip install PyQt5 在接下来的示例中需要用到以下基础知识: PyQt5中的QToolButton:QToolButton是可以设置背景图片的小工…

    python 2023年5月10日
    00
  • PyQt5 QSpinBox – 检索描述

    接下来我会详细讲解Python的“PyQt5 QSpinBox-检索描述”的完整使用攻略。 首先,我们需要明确QSpinBox控件是Qt5中的一种数字调节器,它可以让用户指定一个整数值。而PyQt5是基于Qt5的Python界面开发框架。因此,PyQt5 QSpinBox可以让我们在Python中使用这个数字调节器控件。 1. 安装PyQt5库 在你的Pyt…

    python 2023年5月12日
    00
  • PyQt5 QSpinBox – 获取相交区域

    下面就给您详细讲解 Python 的 PyQt5 QSpinBox-获取相交区域。 什么是 PyQt5 QSpinBox ? PyQt5 是 Python 软件基金会推出的用于创建 Python GUI 应用程序的一套工具库。QSpinBox 是其中的一个选择框控件,它提供了一个用于输入整数的框,用户可以通过点击上下箭头或手动输入来改变数值。 获取相交区域 …

    python 2023年5月12日
    00
  • PyQt5 QDateEdit – 设置日期对齐方式

    当使用PyQt5中的QDateEdit组件时,可以通过设置日期对齐方式来影响组件的外观。日期对齐方式决定了日期显示的位置,以及日期与组件框架的对齐方式。本文将详细介绍如何在PyQt5中使用QDateEdit控件并设置日期对齐方式。 创建QDateEdit控件 首先,我们需要创建一个QDateEdit对象,并将其添加到UI界面中,例如: from PyQt5.…

    python 2023年5月12日
    00
  • PyQt5组合框 用户输入的项目不存储在下拉菜单中

    下面我将详细讲解Python的PyQt5组合框中用户输入的项目不存储在下拉菜单中的使用攻略。 简介 在PyQt5中,组合框(QComboBox)被广泛用于实现用户选择单个值的功能。组合框中可以选择的值通常是静态的,即预先定义在下拉菜单中的。但是,有时候我们需要让用户输入一些自定义的值,在组合框的下拉菜单中并不包含这些值。本文将介绍如何在PyQt5中实现这样的…

    python 2023年5月11日
    00
  • PyQt5 QColorDialog – 为它的QWidget孩子设置皮肤

    当使用PyQt5来创建桌面应用程序时,我们通常需要为QWidget设置一些皮肤,以便美化用户界面。QColorDialog是一个用于选择颜色的标准对话框,可以帮助我们轻松地为QWidget孩子设置皮肤。 以下是使用PyQt5 QColorDialog为QWidget孩子设置皮肤的完整步骤: 步骤1:导入必要的模块 from PyQt5.QtWidgets i…

    python 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部