checkbox - 如何仅针对pyqt5中的选定复选框运行代码?
问题描述
我正在尝试使用 pyqt5 制作菜单 GUI,菜单包括饮料和其他东西。在每个菜单项前面都有一个复选框,当它被选中时,它的价格将被添加到账单中。
self.latte_box = QtWidgets.QCheckBox(self.horizontalLayoutWidget) #latte_box is the name of the checkbox
self.latte_box.setText("")
self.latte_box.setObjectName("latte_box")
self.horizontalLayout.addWidget(self.latte_box)
self.latte_box.stateChanged.connect(self.order)
self.cookie_box = QtWidgets.QCheckBox(self.horizontalLayoutWidget_3)
self.cookie_box.setText("")
self.cookie_box.setObjectName("cookie_box")
self.horizontalLayout_3.addWidget(self.cookie_box)
self.cookie_box.stateChanged.connect(self.order)
bill = 0 #the bill variable
def order(self):
if self.latte_box.isChecked():
bill += 2.85
else:
bill -= 2.85
if self.cookie_box.isChecked():
bill += 1.50
else:
bill -= 1.50
latte_box 和 cookie_box 是列表中 2 个项目的复选框,价格分别为 2.85 美元和 1.50 美元。因此,当用户选中该框时,该项目的价格将被添加到账单中,但如果出现错误,用户只需取消选中该框,该项目的价格将从账单中删除。
这里的问题是所有项目都通过方法(订单)运行,是否选中该框则添加价格,如果未选中则删除该价格。
如何只有选中或未选中的框通过该方法,而未触及的框保持静止..?
解决方案
试试看:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.latte_box = QtWidgets.QCheckBox()
self.latte_box.setText("2.85")
self.latte_box.stateChanged.connect(lambda state, cb=self.latte_box: self.order(state, cb))
self.cookie_box = QtWidgets.QCheckBox()
self.cookie_box.setText("1.50")
self.cookie_box.stateChanged.connect(lambda state, cb=self.cookie_box: self.order(state, cb))
self.label = QLabel()
self.layout = QGridLayout(self)
self.layout.addWidget(self.latte_box, 0, 0)
self.layout.addWidget(self.cookie_box, 0, 1)
self.layout.addWidget(self.label, 1, 0)
self.bill = 0
def order(self, state, cb):
if cb is self.latte_box:
if state:
self.bill += 2.85
else:
self.bill -= 2.85
elif cb is self.cookie_box:
if state:
self.bill += 1.50
else:
self.bill -= 1.50
self.label.setText(f'{abs(self.bill):.2f}')
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
form = Window()
form.show()
sys.exit(app.exec_())
推荐阅读
- caching - 不同级别缓存(即 L1、L2 和 L3)之间的缓存一致性(MESI 协议)
- angular - TS2339:类型“{}”上不存在属性“文本”
- elasticsearch - 检查项目是否已从数组中索引
- python - 我无法使用 python 抓取表格的 tr 标签
- typescript - 最初未定义的值具有繁琐的初始化语法
- javascript - 如何在javascript的引导数据表中将参数字符串转换为列或已知对象
- firebase - Flutter Driver Location Track by admin
- java - 如何在对象值的 ArrayList 中找到第二高的数字
- php - 从 Google 驱动器身份验证重定向后不可接受的链接
- powershell - 为什么带通配符的get-childitem不好用?