pyqt5 是否有更优雅的方式来改变按钮的功能,具体取决于选中的复选框?
pyqt5 Is there a more elegant way of altering the functionality of a button, depending on what checkboxes are checked?
我是新手,正在玩 PyQT5 模块并学习如何为我的小程序制作 GUI。
我制作了一个带有 3 个复选框和一个按钮的小图形用户界面,复选框的功能会发生变化。
我当前的实现如下所示:
#Checkboxes and button logic
def stateChanged(self):
if self.GetErrorsBox.isChecked() and self.GetSpecsBox.isChecked() and self.GetConfigBox.isChecked():
self.execButton.clicked.connect(lambda: self.getErrors())
self.execButton.clicked.connect(lambda: self.copyConfig())
self.execButton.clicked.connect(lambda: self.getSpecs())
elif self.GetErrorsBox.isChecked() and self.GetSpecsBox.isChecked():
self.execButton.clicked.connect(lambda: self.getSpecs())
self.execButton.clicked.connect(lambda: self.getErrors())
elif self.GetErrorsBox.isChecked() and self.GetConfigBox.isChecked():
self.execButton.clicked.connect(lambda: self.getErrors())
self.execButton.clicked.connect(lambda: self.getSpecs())
elif self.GetSpecsBox.isChecked() and self.GetConfigBox.isChecked():
self.execButton.clicked.connect(lambda: self.copyConfig())
self.execButton.clicked.connect(lambda: self.getSpecs())
elif self.GetSpecsBox.isChecked():
self.execButton.clicked.connect(lambda: self.getSpecs())
elif self.GetErrorsBox.isChecked():
self.execButton.clicked.connect(lambda: self.getErrors())
elif self.GetConfigBox.isChecked():
self.execButton.clicked.connect(lambda: self.copyConfig())
问题:
有没有办法将所有这些 IF 和 ELIF 重构为更具可读性的内容?
我以后可能会再添加一个复选框,所以我真的不想继续添加 IF 和 ELIF。我不想成为下一个 yandev,哈哈。
您不需要所有 elif
,只需要:
if self.GetSpecsBox.isChecked():
self.execButton.clicked.connect(lambda: self.getSpecs())
if self.GetErrorsBox.isChecked():
self.execButton.clicked.connect(lambda: self.getErrors())
if self.GetConfigBox.isChecked():
self.execButton.clicked.connect(lambda: self.copyConfig())
我是新手,正在玩 PyQT5 模块并学习如何为我的小程序制作 GUI。
我制作了一个带有 3 个复选框和一个按钮的小图形用户界面,复选框的功能会发生变化。
我当前的实现如下所示:
#Checkboxes and button logic
def stateChanged(self):
if self.GetErrorsBox.isChecked() and self.GetSpecsBox.isChecked() and self.GetConfigBox.isChecked():
self.execButton.clicked.connect(lambda: self.getErrors())
self.execButton.clicked.connect(lambda: self.copyConfig())
self.execButton.clicked.connect(lambda: self.getSpecs())
elif self.GetErrorsBox.isChecked() and self.GetSpecsBox.isChecked():
self.execButton.clicked.connect(lambda: self.getSpecs())
self.execButton.clicked.connect(lambda: self.getErrors())
elif self.GetErrorsBox.isChecked() and self.GetConfigBox.isChecked():
self.execButton.clicked.connect(lambda: self.getErrors())
self.execButton.clicked.connect(lambda: self.getSpecs())
elif self.GetSpecsBox.isChecked() and self.GetConfigBox.isChecked():
self.execButton.clicked.connect(lambda: self.copyConfig())
self.execButton.clicked.connect(lambda: self.getSpecs())
elif self.GetSpecsBox.isChecked():
self.execButton.clicked.connect(lambda: self.getSpecs())
elif self.GetErrorsBox.isChecked():
self.execButton.clicked.connect(lambda: self.getErrors())
elif self.GetConfigBox.isChecked():
self.execButton.clicked.connect(lambda: self.copyConfig())
问题: 有没有办法将所有这些 IF 和 ELIF 重构为更具可读性的内容?
我以后可能会再添加一个复选框,所以我真的不想继续添加 IF 和 ELIF。我不想成为下一个 yandev,哈哈。
您不需要所有 elif
,只需要:
if self.GetSpecsBox.isChecked():
self.execButton.clicked.connect(lambda: self.getSpecs())
if self.GetErrorsBox.isChecked():
self.execButton.clicked.connect(lambda: self.getErrors())
if self.GetConfigBox.isChecked():
self.execButton.clicked.connect(lambda: self.copyConfig())