ttk.OptionMenu () отображение галочки во всех меню

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

from Tkinter import * from ttk import * choices = ['1st Choice', '2nd Choice', '3rd Choice', '4th Choice'] root = Tk() for each in range(10): OptionMenu(root, StringVar(), choices[0], *choices).pack() root.mainloop() 

Это происходит как на Python 2.7, так и на 3.5.

Я даже переместил список choices в цикл, чтобы он генерировался на каждой итерации, и проблема все еще возникает. Я предполагаю, что элементы списка – это те же объекты, что и tkinter, не дифференцируя между ними OptionMenu. Кажется, мне нужен уникальный список каждый раз через цикл.

Есть ли способ ограничить галочку отображением только на OptionMenu, с которым пользователь взаимодействовал?

  • как использовать диалог Python SaveAs
  • Tkinter after_cancel в python
  • Получение состояния Tkinter Check Box
  • Создание переменных StringVar в цикле для виджетов ввода Tkinter
  • AttributeError: объект «NoneType» не имеет атрибута «grid_remove»
  • Как связать собственные события в текстовом виджете Tkinter после того, как он будет привязан текстовым виджетами?
  • Как установить порядок вкладок в приложении tkinter?
  • Как центрировать окно tkinter и сохранить поведение «подходит для детей»?
  • One Solution collect form web for “ttk.OptionMenu () отображение галочки во всех меню”

    Это ошибка в реализации OptionMenu . Он не назначает уникальную переменную для радиообъектов в каждом OptionMenu.

    Вы можете исправить это с помощью небольшого кода. В принципе, вам нужно перебрать все элементы в меню и установить атрибут variable .

    Вот пример:

     def optionmenu_patch(om, var): menu = om['menu'] last = menu.index("end") for i in range(0, last+1): menu.entryconfig(i, variable=var) ... for each in range(10): sv = StringVar() om = OptionMenu(root, sv, choices[0], *choices) om.pack() optionmenu_patch(om, sv) 

    Проблема с отслеживанием ошибок: http://bugs.python.org/issue25684

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