Событие, которое вы ищете: Activate
:
optmenu.bind('<Activate>', onactivate)
Ваш onactivate
обратный вызов принимает событие Activate
, но вы, вероятно, не заботитесь оего атрибуты.
Вторая половина вашей проблемы - как обновить меню.Для этого вы используете атрибут menu
, который является Menu
объектом, для которого вы можете вызывать delete
и add
и все, что вы хотите.Так, например:
def onactivate(evt):
menu = optmenu['menu']
menu.delete(0, tkinter.END)
menu.add_command(label='new choice 1')
menu.add_command(label='new choice 2')
menu.add_separator()
menu.add_command(label='new choice 3')
optvar.set('new choice 1')
(Тем не менее, обратите внимание, что, хотя set
в переменной var в конце, она становится новым выбором по умолчанию и отображается в заголовке меню, онане вызывает выделения выделенного элемента, если курсор не находится над каким-либо из пунктов меню. Если вы этого хотите, это сложно, так что, надеюсь, вы этого не сделаете.)