es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

get() en OptionMenu -> tkinter Python 3

Como puedo hacer que ‘get()’ obtenga el valor en el momento del clic en el botón? El valor impreso siempre se mantiene en el que he establecido por defecto…

langues = ['FR', 'EN']
nb_joueurs = [2, 3, 4]

var_langues = StringVar()
var_nb_joueurs = IntVar()
var_langues.set(langues[0])
var_nb_joueurs.set(nb_joueurs[0])


Label(self.frame_droit, text='Choix de la langue:').pack()
OptionMenu(self.frame_droit, var_langues, *langues).pack(expand=True)
Label(self.frame_droit, text='Nombre de joueurs:').pack()
OptionMenu(self.frame_droit, var_nb_joueurs, *nb_joueurs).pack(expand=True)
Button(self.frame_droit, text="NOUVELLE PARTIE", bg='#1394ab', fg='white', height=2,
                         width=20, command=lambda:print(f'{choix_langue} y {choix_nb_joueurs}')).pack()
choix_nb_joueurs=var_nb_joueurs.get()
choix_langue=var_langues.get()
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener el valor en el momento en que se hace clic en el botón, debe mover las líneas que establecen las variables para obtener los valores dentro de la función lambda del parámetro de comando del botón. En este caso, debes reemplazar:

    Button(self.frame_droit, text="NOUVELLE PARTIE", bg='#1394ab', fg='white', height=2,
                                width=20, command=lambda:print(f'{choix_langue} and {choix_nb_joueurs}')).pack()
    choix_nb_joueurs=var_nb_joueurs.get()
    choix_langue=var_langues.get()
    

    con:

    Button(self.frame_droit, text="NOUVELLE PARTIE", bg='#1394ab', fg='white', height=2,
                                    width=20, command=lambda:print(f'{var_langues.get()} and {var_nb_joueurs.get()}')).pack()
    

    De esta manera, el método get() se llamará en el momento de hacer clic en el botón y se imprimirán los valores correctos.

Comments are closed.