Изменить текст определенной c tkinter Label с помощью функции с аргументами - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь сослаться на специфику c tkinter Label в функции, основанной на вводе аргумента. Я пробовал много вещей и нашел несколько тем о exe c, eval и переменных переменных, но я хочу держаться подальше от плохих практик (в любом случае я не знаю, как добиться этого с помощью этих методов). Мне кажется, что мне не хватает чего-то очень простого c, но я не могу обернуть это голову.

Ниже приведен упрощенный код моей функции:

    def myFunction(input_num):
        while ArbitraryVariableName == False:
            # Do stuff in while loop

        if input_num== "1":
            self.lbl1["text"] = "New Value 1"
        elif input_num == "2":
            self.lbl2["text"] = "New Value 2"
        elif input_num== "3":
            self.lbl3["text"] = "New Value 3"
        elif input_num== "4":
            self.lbl4["text"] = "New Value 4"
        elif input_num== "5":
            self.lbl5["text"] = "New Value 5"

        # And so forth for 20+ more elif statements

You заметит, что input_num напрямую относится к определенному c tkinter Label имени «lbl + input_num». Если это помогает, ниже приведен код для одной из двух этикеток (все они следуют схожему шаблону):

    self.lbl1 = Label(topframe, text="Old Value Test 1")
    self.lbl1 .grid(column=1, row=1)

    self.lbl2 = Label(topframe, text="Old Value Test 2")
    self.lbl2 .grid(column=1, row=2)

    # And so forth

Есть ли более чистый и менее повторяющийся способ сделать это?

1 Ответ

1 голос
/ 30 мая 2020

Вы говорите, что не хотите использовать функцию eval, поэтому вместо этого вы можете использовать список меток, что делает ваш код намного короче:

import tkinter as tk

class example:
    def __init__(self, master):
        self.master = master

        self.lbl1 = tk.Label(self.master, text="Old Value Test 1")
        self.lbl1.grid(column=0, row=0)

        self.lbl2 = tk.Label(self.master, text="Old Value Test 2")
        self.lbl2.grid(column=0, row=1)

        self.lbls = [self.lbl1, self.lbl2]

        self.myfunction(1)
        self.myfunction(2)

    def myfunction(self, input_num):
        self.lbls[input_num - 1]["text"] = f"New Value {input_num}"


def main():
    root = tk.Tk()
    example_win = example(root)
    root.mainloop()

if __name__ == '__main__':
    main()

С этим code Я предположил, что у вас есть целое число из переменной input_num вместо строки, показанной в вашем примере.

Если вы не используете Python 3, вы не можете воспользоваться преимуществами f-string .

Надеюсь, это поможет,

Джеймс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...