Как добавить несколько элементов в список без указания количества значений, которые можно ввести? - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь добавить элементы в список, используя питонов tkinter в качестве графического интерфейса. Пользователь может выбрать количество значений, которые он хотел бы ввести, и программа должна сохранить эти элементы отдельно в том же списке. В настоящее время программа добавляет только последнее значение, введенное пользователем в список. Например, в настоящее время, если пользователь выбирает ввести 2 значения, только второе значение добавляется в список. Я отправил мой точный код ниже. Буду признателен, если кто-нибудь укажет мне правильное направление.

def multiple_chords_num():
    global num_chords_screen
    num_chords_screen = tk.Toplevel(root)
    num_chords_screen.grab_set()

    # geometry
    center_screen(300, 250, num_chords_screen)

    # other screen settings
    num_chords_screen.title('Transposition Tool')
    num_chords_screen.resizable(width = False, height = False)

    tk.Label(num_chords_screen,text = '\n\nHow Many Chords Would you like to Transpose?\n').pack()

    num=tk.Entry(num_chords_screen)
    num.pack()#pevents from object returning 'None'

    tk.Label(num_chords_screen,text = '').pack()
    ttk.Button(num_chords_screen, text = 'OK', command = lambda: multiple_chords(num)).pack(ipadx = 10, ipady = 1)

def multiple_chords(num):

    global multiple_chords_screen
    multiple_chords_screen = tk.Toplevel(root)
    multiple_chords_screen.grab_set()

    # geometry
    center_screen(300, 250, multiple_chords_screen)

    # other screen settings
    multiple_chords_screen.title('Transposition Tool')
    multiple_chords_screen.resizable(width = False, height = False)

    num=int(num.get())#obtains num value and turns it into integer
    for i in range(0,num):
        tk.Label(multiple_chords_screen,text = 'Enter Chord:').pack()
        chord=tk.Entry(multiple_chords_screen)
        chord.pack()#Prevents 'chord' from returning None


    ttk.Button(multiple_chords_screen, text = 'OK', command =lambda : a(chord.get(),num)).pack(ipadx = 10, ipady = 1)


def a(chord):
    u_list.append(chord)
    print(u_list)

1 Ответ

0 голосов
/ 23 апреля 2019

chord может содержать только один элемент. В каждом цикле вы присваиваете новую Entry этой переменной, так что в итоге она сохраняет только последнюю Entry.

Вы должны сохранить все Entry в списке и отправить этот список в функцию a.

Функция a должна использовать цикл for для получения значений из каждого Entry и добавления к u_list

Больше или меньше:

    # list for all entry    
    all_entry = []

    for i in range(0,num):
        tk.Label(multiple_chords_screen,text = 'Enter Chord:').pack()
        chord=tk.Entry(multiple_chords_screen)
        chord.pack()#Prevents 'chord' from returning None
        # keep entry on list
        all_entry.appen(chord)

    # send all_entry to `a`
    ttk.Button(multiple_chords_screen, text='OK', command=lambda : a(all_entry, num)).pack(ipadx = 10, ipady = 1)


def a(all_entry):
    # get all values
    for entry in all_entry:
        u_list.append(entry.get())
    print(u_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...