Вызовите def и измените Qt и переменную на основе переданного значения - PullRequest
0 голосов
/ 14 сентября 2018

В приведенном ниже примере мне нужно выполнить эту функцию примерно 7 раз.Единственное изменение будет вместо strength это будет, например, perception.Везде, где вы видите слово strength, его необходимо будет изменить, в том числе в функциях Qt, таких как self.strengthSpin.setValue().

Есть ли способ сделать это, не копируя / вставляя код несколько раз?

if stat == "strength":
    newValue = self.strengthSpin.value()
    varChange = newValue - strength
    if varChange > 0:
        if statPoints - varChange >= 0:
            statPoints -= varChange
            self.statPointsLCD.setProperty("intValue", statPoints)
            strength += varChange
            self.strengthSpin.setValue(strength)
        else:
            print("not enough stat points")
            self.strengthSpin.setValue(strength)
    else:
        if newValue > 0:
            print("should be adding")
            statPoints -= varChange
            self.statPointsLCD.setProperty("intValue", statPoints)
            strength += varChange
            self.strengthSpin.setValue(strength)
        else:
            print("must be at least 0")
            self.strengthSpin.setValue(strength)

1 Ответ

0 голосов
/ 16 сентября 2018

Да, но вам придется сохранить strength и statPoints в качестве атрибутов `self '(или передать их методу, а затем вернуть их из него):

def update_value(self, name):  # name is 'strength'
    spin = getattr(self, name + 'Spin')
    newValue = spin.value()
    oldValue = getattr(self, name)
    varChange = newValue - oldValue
    if varChange > 0:
        if self.statPoints - varChange >= 0:
            self.statPoints -= varChange  # if this variable should be different for different names, use setattr instead
            self.statPointsLCD.setProperty("intValue", statPoints)
            setattr(self, name, newValue)
            spin.setValue(newValue)
        else:
            print("not enough stat points")
            spin.setValue(oldValue)
    else:
        if newValue > 0:
            print("should be adding")
            self.statPoints -= varChange
            self.statPointsLCD.setProperty("intValue", statPoints)
            setattr(self, name, newValue)
            spin.setValue(newValue)
        else:
            print("must be at least 0")
            spin.setValue(oldValue)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...