как использовать цикл for для переменных, вызывающих одну и ту же функцию

#python #class #for-loop #tkinter

Вопрос:

Я провожу некоторые тесты, чтобы создать графический интерфейс для повышения производительности на работе, и мне нужно создать 10 записей и с помощью кнопки получить значение всех отдельно, а в случае этого кода просто сохранить в списке, но я считаю, что есть один способ сделать это с помощью цикла, потому что мне нужно 10 раз вызывать одну и ту же функцию с переменными с разными именами и брать каждую переменную, создавать 10 вставок и 10 вставок, что делает мой код большим, грязным и ужасным для чтения. (извините за странный английский, я перевожу с помощью Google translator)

     from tkinter import *
    from tkinter import ttk


    class Criar_input(object):
      def __init__(self, master):
      self.master = master

      self.input = Entry(master)
      self.input.pack()


      def getting(): 
        frase_1 = input_1.input.get()
        frase_2 = input_2.input.get()
        frase_3 = input_3.input.get()
        frase_4 = input_4.input.get()
        frase_5 = input_5.input.get()
        frase_6 = input_6.input.get()
        frase_7 = input_7.input.get()
        frase_8 = input_8.input.get()
        frase_9 = input_9.input.get()
        frase_10 = input_10.input.get()
        lb.insert(0, frase_1)
        lb.insert(1, frase_2)
        lb.insert(2, frase_3)
        lb.insert(3, frase_4)
        lb.insert(4, frase_5)
        lb.insert(5, frase_6)
        lb.insert(6, frase_7)
        lb.insert(7, frase_8)
        lb.insert(8, frase_9)
        lb.insert(9, frase_10)


     def get_input(master):
        bt = Button(master, text='Pressione', command=getting)
        bt.pack(side='bottom', expand=1)


     app = Tk()

     input_1 = Criar_input(app)
     input_2 = Criar_input(app)
     input_3 = Criar_input(app)
     input_4 = Criar_input(app)
     input_5 = Criar_input(app)
     input_6 = Criar_input(app)
     input_7 = Criar_input(app)
     input_8 = Criar_input(app)
     input_9 = Criar_input(app)
     input_10 = Criar_input(app)

     lb = Listbox(app)
     lb.pack(side='bottom', expand=1)
     get_input(app)

     app.mainloop()
 

Ответ №1:

Сохраните виджеты в списке, а затем выполните цикл по списку.

 entries = []
for i in range(10):
    entry = Entry(...)
    entries.append(entry)
 

Когда вам нужно получить все данные, вы можете просмотреть список виджетов

 for entry in entries:
    data = entry.get()
    lb.insert("end", data)