Виджет OptionMenu не обновляется при изменении StringVar, пока не появится - PullRequest
1 голос
/ 17 июня 2019

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

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

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

Вот код для воспроизведения этого поведения:

from tkinter import *

root = Tk()

default_text = 'select an item'

def thing_selected(self, *args):
    #other stuff happens here
    var.set(default_text)

var = StringVar(root)
var.set(default_text)
var.trace('w', thing_selected)

menu = OptionMenu(root, var, *['Pizza','Lasagne','Fries','Fish'])
menu.pack()

root.mainloop()

Вот рисунок, представляющий результат: gif

Я ожидаю, что текст вверху будет обновляться мгновенно, но он обновляется только тогда, когда курсор находится над виджетом

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

1 Ответ

2 голосов
/ 17 июня 2019

Вы можете выбрать другой маршрут и использовать command атрибут OptionMenu:

import tkinter as tk

root = tk.Tk()

default_text = 'select an item'

def thing_selected(selected):
    #other stuff happens here
    print(var.get())
    var.set(default_text)
    print(var.get())

var = tk.StringVar()
var.set(default_text)

options = ['Pizza','Lasagne','Fries','Fish']
menu = tk.OptionMenu(root, var, *options, command = thing_selected)
menu.pack()

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...