Python pyqt 发送者状态处理

Python pyqt sender state handling

我必须根据复选框状态禁用一些小部件。小部件和复选框具有相似的名称:checkP0minP0 等。 有比我做的更优雅的方法吗? 我是 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)

很少有 execeval 是工作的正确工具,因此您的第一直觉应该始终尽可能避免使用它们。

在这种特殊情况下,您可以使用 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)