Python pyqt 发送者状态处理
Python pyqt sender state handling
我必须根据复选框状态禁用一些小部件。小部件和复选框具有相似的名称:checkP0
、minP0
等。
有比我做的更优雅的方法吗?
我是 pyqt 和 python 初学者。非常感谢。
def checkboxes (self, state):
if state == QtCore.Qt.Checked:
name = self.sender().objectName()
mod = "self.mod" + name[-2:] + ".setDisabled(False)"
min = "self.min" + name[-2:] + ".setDisabled(False)"
max = "self.max" + name[-2:] + ".setDisabled(False)"
exec str(mod)
exec str(min)
exec str(max)
else:
name = self.sender().objectName()
mod = "self.mod" + name[-2:] + ".setDisabled(True)"
min = "self.min" + name[-2:] + ".setDisabled(True)"
max = "self.max" + name[-2:] + ".setDisabled(True)"
exec str(mod)
exec str(min)
exec str(max)
很少有 exec
或 eval
是工作的正确工具,因此您的第一直觉应该始终尽可能避免使用它们。
在这种特殊情况下,您可以使用 getattr
和一个循环来代替:
def checkboxes (self, state):
suffix = self.sender().objectName()[-2:]
enable = state == QtCore.Qt.Checked
for prefix in 'mod', 'min', 'max':
getattr(self, prefix + suffix).setEnabled(enable)
我必须根据复选框状态禁用一些小部件。小部件和复选框具有相似的名称:checkP0
、minP0
等。
有比我做的更优雅的方法吗?
我是 pyqt 和 python 初学者。非常感谢。
def checkboxes (self, state):
if state == QtCore.Qt.Checked:
name = self.sender().objectName()
mod = "self.mod" + name[-2:] + ".setDisabled(False)"
min = "self.min" + name[-2:] + ".setDisabled(False)"
max = "self.max" + name[-2:] + ".setDisabled(False)"
exec str(mod)
exec str(min)
exec str(max)
else:
name = self.sender().objectName()
mod = "self.mod" + name[-2:] + ".setDisabled(True)"
min = "self.min" + name[-2:] + ".setDisabled(True)"
max = "self.max" + name[-2:] + ".setDisabled(True)"
exec str(mod)
exec str(min)
exec str(max)
很少有 exec
或 eval
是工作的正确工具,因此您的第一直觉应该始终尽可能避免使用它们。
在这种特殊情况下,您可以使用 getattr
和一个循环来代替:
def checkboxes (self, state):
suffix = self.sender().objectName()[-2:]
enable = state == QtCore.Qt.Checked
for prefix in 'mod', 'min', 'max':
getattr(self, prefix + suffix).setEnabled(enable)