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 QCommandLinkButton – 为检查和悬停的组合状态设置边框

    PyQt5 QCommandLinkButton是PyQt5中的一个组件,它可以用于创建一个按钮,该按钮可以在需要检查和悬停的情况下显示边框。下面是Python PyQt5 QCommandLinkButton的完整使用攻略: 1. 安装PyQt5 在开始使用PyQt5 QCommandLinkButton之前,需要先安装PyQt5。可以通过pip命令来安装…

    python 2023年5月12日
    00
  • PyQt5 – 单选按钮的背景色

    针对“PyQt5单选按钮的背景色”的使用攻略,我将从以下几个方面进行讲解: PyQt5的安装与环境配置; PyQt5中单选按钮的基本使用; PyQt5中单选按钮的背景色设置。 1. PyQt5的安装与环境配置 在Python开发环境中使用PyQt5需要先安装PyQt5库。可以通过pip安装,在控制台运行以下命令可进行安装: pip install PyQt5…

    python 2023年5月10日
    00
  • PyQt5 – 如何创建和获取按钮的帮助文本

    在使用PyQt5创建和获取按钮的帮助文本之前,我们需要先安装PyQt5库,可以使用以下命令安装: pip install PyQt5 创建按钮并设置帮助文本: 通过如下代码,我们可以创建一个名为button的按钮,并且使用setToolTip()方法为该按钮设置帮助文本。 from PyQt5.QtWidgets import QApplication, Q…

    python 2023年5月10日
    00
  • PyQt5 QCalendarWidget – 检查其是否拥有焦点

    要检查PyQt5中的QCalendarWidget是否拥有焦点,我们可以使用hasFocus()方法。 下面是使用QCalendarWidget检查是否拥有焦点的示例代码: from PyQt5.QtWidgets import QApplication, QWidget, QCalendarWidget from PyQt5.QtCore import Q…

    python 2023年5月12日
    00
  • PyQt5组合框 当鼠标悬停在列表视图上时不同的边框大小

    PyQt5的组合框(QComboBox)提供了一种方便的方式,在单个控件中提供一个下拉列表和一个可编辑的文本字段。当鼠标悬停在下拉列表视图的项目上时,我们可能希望为此项目设置不同的边框大小。以下是PyQt5组合框设置鼠标悬停时列表视图边框大小的详细攻略: 步骤1:导入必要的库 from PyQt5.QtCore import Qt from PyQt5.Qt…

    python 2023年5月11日
    00
  • PyQt5 QDockWidget – 获取图形效果对象

    下面我会详细讲解 Python PyQt5 中 QDockWidget 的使用,包括获取图形效果对象。 1. QDockWidget 简介 QDockWidget 是 PyQt5 中的一个小部件,可以在父窗口的指定位置停靠。其特点是可以根据需要添加或删除小部件,使得界面更加灵活。 QDockWidget 的主要方法有: setWidget():设置 QDoc…

    python 2023年5月12日
    00
  • PyQt5标签 – 添加阴影

    当我们使用PyQt5创建GUI界面时,有时想要为标签控件添加阴影效果,以增加界面的美观性和视觉效果。在PyQt5中,可以通过设置QLabel的样式表来添加阴影。下面是具体步骤和示例说明: 步骤 导入PyQt5中需要使用的库: from PyQt5.QtGui import QPainter, QPalette, QColor, QFont, QPixmap,…

    python 2023年5月11日
    00
  • PyQt5 – 如何在组合框的项目之间添加分隔符

    当我们需要在PyQt5的组合框中添加分隔符时,可以使用setSeparator()方法。此方法用于设置组合框的分隔符,可以接受字符串参数。 以下是一个简单的示例代码,用来在组合框的项目之间添加分隔符: from PyQt5 import QtWidgets class MyWindow(QtWidgets.QWidget): def __init__(sel…

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