0

I've made a function that looks like this:

def sok_funk(self, lagnr, skivenr, dato, x):
        self.lagnr = lagnr
        self.skivenr = skivenr
        self.dato = dato
        self.x = x
        print("Printing lagnr, skivenr, og dato ", lagnr, skivenr, dato, x)
        c = conn.cursor()
        get_from_db = "SELECT * FROM trening_og_oppskyting WHERE Lagnr = {} AND Skivenr = {}\
            AND Dato = '{}'".format(lagnr, skivenr, dato)
        c.execute(get_from_db)
        conn.commit()
        sk_1 = c.fetchall()
        xy = 1
        if sk_1 == []:
            self.navn_sk_1.clear()
            self.tr_1_sk_1.setChecked(False)
            self.tr_2_sk_1.setChecked(False)
            self.oppsk_1_sk_1.setChecked(False)
            self.oppsk_2_sk_1.setChecked(False)
            self.notatfelt_sk_1.clear()
        else:
            for row in sk_1:
                self.navn_sk_1.setText(row[2])
                self.notatfelt_sk_1.setText(row[8])
                if row[4] == 1:
                    self.tr_1_sk_1.setChecked(True)
                elif row[4] == 0:
                    self.tr_1_sk_1.setChecked(False)
                if row[5] == 1:
                    self.tr_2_sk_1.setChecked(True)
                elif row[5] == 0:
                    self.tr_2_sk_1.setChecked(False)
                if row[6] == 1:
                    self.oppsk_1_sk_1.setChecked(True)
                elif row[6] == 0:
                    self.oppsk_1_sk_1.setChecked(False)
                if row[7] == 1:
                    self.oppsk_2_sk_1.setChecked(True)
                elif row[7] == 0:
                    self.oppsk_2_sk_1.setChecked(False)

My question is that in every line that contains sk_1 like this: self.name_sk_1.clear() i want to have a placeholder or something for where the number 1 is. I tried this: self.name_sk_{}.clear().format(x), but placeholder like this does not work here. How can I do this?

Happy Sunday every one:)

Tor Harry
  • 45
  • 5
  • 1
    You can construct the attribute names as strings (f-strings make it easier) then you can use *getattr()* to access the associated value(s) – DarkKnight Oct 23 '22 at 08:29
  • 1
    Specifically, to stay with your attempted solution: ```getattr(self, "name_sk_{}".format(x)).clear()``` – Homer512 Oct 23 '22 at 08:45
  • 1
    Firstly, do this: `for x, row in enumerate(sk_1)`; and then do e.g. `getattr(self, f'navn_sk_{x}').setText(row[2])`. – ekhumoro Oct 23 '22 at 11:56
  • 1
    PS: you can also eliminate all those repeated if-statements and reduce them to a single line: e.g. `getattr(self, f'tr_1_sk_{x}').setChecked(bool(row[4]))`. – ekhumoro Oct 23 '22 at 12:03

0 Answers0