下面我来为你详细讲解 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技术站