You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5:勾选/取消QPushButton时更新标签及座位选座计价

解决方法

要实现勾选/取消座位时自动更新总价标签,核心是利用QPushButton的toggled(bool)信号,结合总价变量和显示标签完成逻辑,具体步骤如下:

  1. 创建总价显示标签
    先在界面中添加一个用来展示总价的QLabel,位置可自行调整:
self.total_price_label = QLabel("总价: 0元", self.centralwidget)
self.total_price_label.setGeometry(QRect(280, 480, 200, 30))
  1. 初始化总价跟踪变量
    在类的初始化方法(比如__init__)里定义变量记录当前总价:
self.total_price = 0
  1. 给座位按钮绑定信号与处理逻辑
    修改你原有的座位创建代码,给每个座位按钮绑定toggled信号,同时给按钮设置单价属性(这里假设VIP座单价为100元,可按需修改):
vipseats = QButtonGroup()
vip_seat_price = 100  # VIP座位单价
for i in range(1, 41):
    vseat = QPushButton(self.centralwidget, checkable=True)
    vipseats.addButton(vseat)
    # 给按钮绑定价格属性
    vseat.setProperty("price", vip_seat_price)
    # 绑定状态变化信号到处理函数
    vseat.toggled.connect(self.update_total_price)
    
    if i <= 20:
        labelm = QLabel(f'V-A-{i}', self.centralwidget)
        labelm.setGeometry(QRect(280 + 60*i, 550, 50, 50))
        vseat.setGeometry(QRect(280 + 60*i, 550, 50, 50))
    elif 20 < i <= 40:  # 修正原代码的范围错误,range(1,41)仅生成1-40的整数
        labelm = QLabel(f'V-B-{i-20}', self.centralwidget)
        labelm.setGeometry(QRect(280 + 60*(i-20), 625, 50, 50))
        vseat.setGeometry(QRect(280 + 60*(i-20), 625, 50, 50))
  1. 实现总价更新函数
    在类中定义处理总价更新的函数,根据按钮勾选状态调整总价并刷新标签:
def update_total_price(self, checked):
    # 获取触发信号的按钮
    button = self.sender()
    # 获取按钮对应的座位价格
    seat_price = button.property("price")
    if checked:
        self.total_price += seat_price
    else:
        self.total_price -= seat_price
    # 更新标签显示
    self.total_price_label.setText(f"总价: {self.total_price}元")

注意事项

  • 原代码中elif 20 < i <= 41需修正为20 < i <=40,避免逻辑覆盖不全。
  • 如果不同座位有不同定价,只需给对应按钮设置不同的price属性即可,不需要修改更新函数。

内容的提问来源于stack exchange,提问作者Koshy John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:50:36