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

моя проблема заключается в следующем: у меня есть несколько файлов, и я создал раскрывающееся меню с именами, следующее, что мне нужно, это меню опций, которое можно изменить всякий раз, когда имя файла выбрано для отображения некоторых данных из определенного файла в виде option.To быть ясным, мой вопрос только о том, как изменить меню опций, когда выбран выбор из выпадающего списка. Спасибо за любую помощь.

  • Как получить доступ к переменным из разных классов в tkinter python 3
  • Tkinter & PIL Изменить размер изображения на этикетке
  • python и tkinter: использование полос прокрутки на холсте
  • Получить текущие координаты элемента на виджете Canvas с учетом его элемента управления?
  • Установка окна в фиксированный размер с помощью Tkinter
  • Перетаскивание в Tkinter?
  • измерять прогресс (время осталось), в то время как os.listdir генерирует список (Python)
  • ttk.Combobox сбой, когда состояние доступно только для чтения и не в фокусе
  • 2 Solutions collect form web for “Как динамически заполнять виджет параметра в tkinter в зависимости от выбора из выпадающего меню?”

    Виджет OptionMenu – это не что иное, как класс удобства, который создает меню, связанное с меню. Вы можете получить это меню с помощью атрибута "menu" . Единственный трюк заключается в том, чтобы знать, что должны делать пункты меню, что является не чем иным, как установкой значения связанной переменной.

    Вот пример:

     import Tkinter as tk class SampleApp(tk.Tk): def __init__(self, *args, **kwargs): tk.Tk.__init__(self, *args, **kwargs) self.om_variable = tk.StringVar(self) b1 = tk.Button(self, text="Colors", width=8, command=self.use_colors) b2 = tk.Button(self, text="Sizes", width=8, command=self.use_sizes) self.om = tk.OptionMenu(self, self.om_variable, ()) self.om.configure(width=20) self.use_colors() b1.pack(side="left") b2.pack(side="left") self.om.pack(side="left", fill="x", expand=True) def _reset_option_menu(self, options, index=None): '''reset the values in the option menu if index is given, set the value of the menu to the option at the given index ''' menu = self.om["menu"] menu.delete(0, "end") for string in options: menu.add_command(label=string, command=lambda value=string: self.om_variable.set(value)) if index is not None: self.om_variable.set(options[index]) def use_colors(self): '''Switch the option menu to display colors''' self._reset_option_menu(["red","orange","green","blue"], 0) def use_sizes(self): '''Switch the option menu to display sizes''' self._reset_option_menu(["x-small", "small", "medium", "large"], 0) if __name__ == "__main__": app = SampleApp() app.mainloop() 

    Поскольку OptionMenu предоставляет параметр команды, я бы предложил оставить ссылку на уже предоставленную команду (если есть) и передать ее новым параметрам следующим образом:

    посещаемость, переменные, основанные на предыдущем ответе

     def __init__(self, *args, **kwargs): ... self.command=kwargs['command'] ... def _reset_option_menu(options, index=None): ... menu.add_command(label=string, command=lambda:self.command(), value=self.om_variable.set(string)) ... 

    Надеюсь, что любой из них использует Btw, очень полезный ответ, данный Брайаном Окли,

    Python - лучший язык программирования в мире.