Добавление галочки рядом с выбранным пунктом в tkinter OptionMenu

Как добавить галочку рядом с выбранным в данный момент элементом (или выделить его) в OptionMenu в графическом интерфейсе tkinter? Идея состоит в том, что когда я снова нажимаю, чтобы выбрать другой элемент, я могу легко увидеть, какой из них выбран (аналогично следующему рисунку).

введите здесь описание изображения

Я только что добавил новый пример:

from tkinter import *

OptionList = [
"Aries",
"Taurus",
"Gemini",
"Cancer"
] 

app = Tk()

app.geometry('100x200')

variable = StringVar(app)
variable.set(OptionList[0])

opt = OptionMenu(app, variable, *OptionList)
opt.config(width=90, font=('Helvetica', 12))
opt.pack(side="top")


labelTest = Label(text="", font=('Helvetica', 12), fg='red')
labelTest.pack(side="top")

def callback(*args):
    labelTest.configure(text="The selected item is {}".format(variable.get()))

variable.trace("w", callback)

app.mainloop()

person Adrian    schedule 16.09.2020    source источник
comment
Есть Checkbutton с tkinter, которые работают как чекбоксы.   -  person Cool Cloud    schedule 16.09.2020
comment
Я знаю, могу ли я привязать это к OptionMenu?   -  person Adrian    schedule 16.09.2020
comment
Спасибо за ответ, но я ищу что-то более похожее на картинку, которую я добавил в вопросе   -  person Adrian    schedule 16.09.2020
comment
Я добавил подробный ответ   -  person Cool Cloud    schedule 16.09.2020
comment
спасибо, я уже решил это сделать, так как я не нашел способ на тк   -  person Adrian    schedule 17.09.2020
comment
Да, вы можете получить аналогичный результат, используя tk.OptionMenu. Добавлен ответ для справки.   -  person acw1668    schedule 18.09.2020


Ответы (2)


Просто используйте ttk виджеты для этого современного стиля, попробуйте сказать что-то вроде:

from tkinter import ttk
....
     #arguments  -  master  variable     default      *values
opt = ttk.Optionmenu(app, variable, OptionList[0], *OptionList)

Эффект, который дает это, очень похож или, может быть, идентичен тому, чего вы пытаетесь достичь.

Вы можете заметить здесь дополнительный третий позиционный аргумент, на самом деле это аргумент default=OptionList[0], указанный здесь (только для ttk.Optionmenu), это просто значение по умолчанию, которое будет отображаться в меню параметров, игнорирование этого может привести к некоторым ошибкам во внешнем виде меню параметров, например это.

И также имейте в виду, что у него нет опции font. Чтобы преодолеть это, проверьте это

Надеюсь, это было вам полезно, дайте мне знать, если возникнут какие-либо ошибки или сомнения.

Ваше здоровье

person Cool Cloud    schedule 16.09.2020

Вы можете получить аналогичный эффект, используя tk.OptionMenu:

from tkinter import *

OptionList = [
"Aries",
"Taurus",
"Gemini",
"Cancer"
] 

app = Tk()

app.geometry('300x200')

variable = StringVar(app)
variable.set(OptionList[0])

opt = OptionMenu(app, variable, None) # need to supply at least one menu item
opt.config(width=90, font=('Helvetica', 12))
opt.pack(side="top")

# populate the menu items
menu = opt['menu']
menu.delete(0) # remove the None item
for item in OptionList:
    menu.add_radiobutton(label=item, variable=variable)

labelTest = Label(text="", font=('Helvetica', 12), fg='red')
labelTest.pack(side="top")

def callback(*args):
    labelTest.configure(text="The selected item is {}".format(variable.get()))

variable.trace("w", callback)

app.mainloop()
person acw1668    schedule 18.09.2020