Радиокнопка для tkinter работает только для последнего выбора

Я создаю создателя персонажа, и мне нужно спросить пользователя, каков пол его персонажа. У меня есть списки местоимений для обозначения в зависимости от пола, но по какой-то причине они эффективны только с последним вариантом. Я использовал радиокнопки, чтобы пользователь мог выбрать пол своего персонажа.

У меня есть последний вариант — быть гендерно-нейтральным, и каждый раз, когда я запускаю программу, независимо от того, что я выбираю, она всегда использует гендерно-нейтральные местоимения. Я не уверен, как еще я могу это исправить, я пытался создать каждую кнопку отдельно вне цикла for, я пробовал размещать функцию в разных местах, ничего не сработало.

Вот фрагмент моего кода:

class gender(tk.Frame):
    def __init__(self, master):
        global gender
        name = e1.get()
        tk.Frame.__init__(self, master)
        tk.Label(self, text=("What gender is your character?"), bg='#e6f7f5', fg='#33271b', font='Fixedsys 24 bold').pack()
        greet = ("Hey {}!".format(name))
        tk.Label(self, text=(greet)).pack()
        
        
        v = tk.IntVar()
        
        def ShowChoice():
            print(v.get())
            
        
        genderchoices = [('Male', 1), ('Female', 2), ('Other', 3)]
        def setgender(x):
            global gender
            gender = x
            return gender
        
        for g, val in genderchoices:
            tk.Radiobutton(self,
                           text=g,
                           padx=20,
                           variable=v,
                           value=val,
                           command=lambda:[ShowChoice,setgender(val)]).pack(anchor=tk.W)


        tk.Button(self, text="Next",
            command=lambda: [master.switch_frame(PageThree)]).pack()
    
class PageThree(tk.Frame):
    def __init__(self, master):
        global gender
        tk.Frame.__init__(self, master)
        next = "hey {}.".format(name)
        more=0
        if gender == 1:
            more = "i like {}!".format(mpronouns[1])
        if gender == 2:
            more = "i like {}!".format(fpronouns[1])
        if gender == 3:
            more = "i like {}!".format(npronouns[1])
        tk.Label(self, text=(next)).pack()
        tk.Label(self, text=(more)).pack()

person chris    schedule 15.01.2021    source источник
comment
Я рекомендую не использовать lambda со списком функций. Это затрудняет понимание кода и его отладку. Создайте правильную функцию специально для радиокнопок.   -  person Bryan Oakley    schedule 15.01.2021