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.

Menú de Opción de Tkinter: El primer valor desaparece.

Estoy usando Tkinter para construir un formulario con cierta lógica condicional. Hay dos Menús de opciones, y las opciones disponibles en el segundo dependen de la selección del usuario en el primero. Por alguna razón, sin embargo, la opción predeterminada en el primer menú desaparece una vez que el usuario selecciona una opción diferente. Por ejemplo, si el usuario selecciona la categoría B en el reprex que se muestra a continuación, pueden cambiar a C o volver a B, pero no pueden cambiar a A.

¿Puede alguien ayudarme a entender por qué está sucediendo esto?

from tkinter import *
from tkinter import ttk

def update_options(self, *args):
    list = dict[first_category.get()]
    second_category.set(list[0])

menu = optionmenu_b['menu']
menu.delete(0, 'end')

for item in list:
    menu.add_command(label=item, command=lambda selection=item: second_category.set(selection))

window = Tk()

style = ttk.Style(window)
style.theme_use("aqua")

dict = {'A':
['A1', "A2"],
'B':
['B1', 'B2'],
'C':
['C1', 'C2']}

first_category = StringVar()
second_category = StringVar()

optionmenu_a = ttk.OptionMenu(window, first_category, *dict.keys())
optionmenu_b = ttk.OptionMenu(window, second_category, '')
for item in dict['A']:
    optionmenu_b['menu'].add_command(label=item, command=lambda selection=item: second_category.set(selection))

first_category.trace('w', update_options)

optionmenu_a.grid(row = 0, column = 1)
optionmenu_b.grid(row = 1, column = 1)

ttk.Label(window, text = "First Label:").grid(row = 0, column = 0)
ttk.Label(window, text = "Second Label:").grid(row = 1, column = 0)

window.title('Options')
window.geometry("500x500+10+10")
window.mainloop()
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema está sucediendo porque la función update_options solo está agregando elementos al menú desplegable second_category, no está agregando el valor predeterminado de nuevo. Para solucionar esto, puede agregar la siguiente línea de código al principio de la función update_options:

    second_category.set('')
    

    Esto borrará la selección en el menú desplegable second_category cada vez que el usuario seleccione una opción diferente en el menú desplegable first_category, asegurando que la opción predeterminada siempre esté disponible.

Comments are closed.