Как сравнить вводимые пользователями данные со списком с помощью tkinter

#python #list #tkinter

#python #Список #tkinter

Вопрос:

Я пытаюсь найти способ сравнить вводимые пользователями данные с массивом. Если пользовательский ввод уникален и не соответствует ни одному из элементов в списке, он должен добавить ввод в список. Все мои методы пока не работали. Ниже приведен мой последний

 def input_stub():
    global player_num
    global name_entry
    global display_num
    if player_num != t1_amount:     ##t1_amount is the amount of elements the user wants in the list
        t1_input = Toplevel(master)
        final_confirm.withdraw()
        title = Label(t1_input, text = "Team 1 Input").grid(row = 0, column = 1)
        request = Label(t1_input, text = "Please enter player "   str(display_num)   " name").grid(row = 1, column = 1)
        name_entry = Entry(t1_input)
        name_entry.grid(row = 2, column = 1)
        display_num = display_num   1
        valid_button = Button(t1_input, text = "Submit", command = lambda: player_valid()).grid(row = 4, column = 1)
        def player_valid():              ##THIS IS WHERE USER INPUT NEEDS TO BE COMPARED
            elem = len(team_1_array)
            for i in range(0, elem):
                p = None
                while not p or p in team_1_array:
                    p = name_entry.get()
                    if p in team_1_array:
                        error = Label(t1_input, text = "Error").grid(row = 3, column = 1)
                    else:
                        player_num = player_num   1
                        t1_validation(team_1_array)  ##IF IT PASSES, IT MOVES ON TO BEING PUT ONTO THE END OF THE LIST
        def t1_validation(current_team):
            global player_num
            global display_num
            global team_1_array
            global t1_confirm
            current_player_trans = p
            current_team.append(current_player_trans)
            if player_num != t1_amount:
                t1_input.destroy()
                input_stub()
            elif player_num == t1_amount:    ##THIS DISPLAYES THE LIST ONCE THE SELECTED AMOUNT OF ELEMENTS ARE IN THE ARRAY
                t1_confirm = Toplevel(master)
                t1_input.withdraw()
                t1_confirm.geometry("200x200")
                player_count = 1
                for i in range(len(team_1_array)):
                    exec('Label%d=Label(t1_confirm,text="%s")nLabel%d.pack()' % (i, "Player "   str(player_count)   " : "   team_1_array[i], i))
                    player_count = player_count   1
                confirm_button = Button(t1_confirm, text = "Confirm Team 1", command = lambda: input_stub_2()).pack()
 

Любая помощь будет оценена

Комментарии:

1. Как вы думаете, почему это не работает? Что делает код, который не соответствует вашим ожиданиям?

2. @BryanOakley Программа не переходит к следующему окну ввода, как только я нажимаю valid_button. Он либо остается там, либо вылетает

3. Что вы сделали для отладки этого? Вы убедились, что ваша функция вызывается? Вы проверили p=name_entry.get() , возвращает ли это то, что вы ожидаете? Что еще вы пытались сделать?

4. @BryanOakley он сохранил запись в P, но кнопка отправки valid_button даже сейчас ничего не делает, я добавил флаг ниже def player_valid() , и он отключился

5. Поместите print() одну другую строку и попытайтесь выяснить, какие строки печатаются и где код прерывается.