3. QPushButton按钮的点击事件处理

QPushButton按钮的点击事件处理 学习卡片

任务目标

创建三个按钮,分别点击后将主窗口背景色切换为红色、绿色和蓝色。通过本案例掌握QPushButton的clicked信号与槽函数连接的两种方式:connect函数连接自定义槽,以及使用QSignalMapper(或lambda表达式)传递按钮标识。

环境依赖

  • Python 3.6+
  • PyQt5 或 PySide2(本案例代码基于PyQt5编写,若使用PySide2,只需将导入语句中的PyQt5替换为PySide2即可)

完整实现代码

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor

class ColorChangeWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QPushButton点击事件示例")
        self.setFixedSize(300, 200)
        
        # 创建三个按钮
        self.btn_red = QPushButton("红色", self)
        self.btn_green = QPushButton("绿色", self)
        self.btn_blue = QPushButton("蓝色", self)
        
        # 布局
        layout = QVBoxLayout(self)
        layout.addWidget(self.btn_red)
        layout.addWidget(self.btn_green)
        layout.addWidget(self.btn_blue)
        
        # 方式一:connect连接自定义槽函数
        self.btn_red.clicked.connect(self.change_to_red)
        self.btn_green.clicked.connect(self.change_to_green)
        self.btn_blue.clicked.connect(self.change_to_blue)
        
        # 方式二:使用lambda表达式传递参数(等效实现,二选一即可)
        # self.btn_red.clicked.connect(lambda: self.change_color("red"))
        # self.btn_green.clicked.connect(lambda: self.change_color("green"))
        # self.btn_blue.clicked.connect(lambda: self.change_color("blue"))
    
    # 三个独立的槽函数
    def change_to_red(self):
        self.setStyleSheet("background-color: #FF0000;")
    
    def change_to_green(self):
        self.setStyleSheet("background-color: #00FF00;")
    
    def change_to_blue(self):
        self.setStyleSheet("background-color: #0000FF;")
    
    # 使用参数的统一槽函数(配合lambda使用)
    # def change_color(self, color_name):
    #     color_map = {"red": "#FF0000", "green": "#00FF00", "blue": "#0000FF"}
    #     self.setStyleSheet(f"background-color: {color_map[color_name]};")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = ColorChangeWindow()
    window.show()
    sys.exit(app.exec_())

运行方式

  1. 将上述代码保存为button_color_demo.py。
  2. 在终端执行:python button_color_demo.py。

验证方法

  • 程序启动后,窗口默认显示系统背景色(通常为灰色)。
  • 点击“红色”按钮,窗口背景立即变为红色(#FF0000)。
  • 点击“绿色”按钮,窗口背景变为绿色(#00FF00)。
  • 点击“蓝色”按钮,窗口背景变为蓝色(#0000FF)。
  • 三个按钮本身仍保持默认外观,说明样式表只作用于窗口背景,验证通过。

关键说明

  • 代码中提供了两种信号连接方式:方式一为每个按钮连接独立槽函数,直观但代码重复;方式二(注释部分)使用lambda表达式配合统一槽函数,更简洁。两种方式效果完全等价,实际开发中任选其一。
  • clicked信号在按钮被鼠标点击时发出,是QPushButton最常用的信号。若需区分多个按钮的点击来源,lambda传参或QSignalMapper是标准做法。
  • 使用setStyleSheet改变背景色是最简实现。若需更精细的颜色控制,可改用QPalette,但本案例以信号槽演示为核心,故采用样式表方案。