Как заставить tkinter OptionMenu отображать имя выбранной опции? - PullRequest
0 голосов
/ 17 июня 2020

В tkinter я создал меню параметров, используя класс OptionMenu. В качестве примера, OptionMenu ниже имеет параметры A, B, C, D, и т.д. c.:

self.clicked = tk.StringVar(self.parent)
self.clicked.set("Select Column")

self.drop = tk.OptionMenu(self.parent, self.clicked, 'Select Column', command=self.idle)
    for i in columnNames[:]:
        self.drop['menu'].add_command(label=i, command=tk._setit(self.clicked, i, self.select_data))
self.drop.pack()

Примечание: функция self.idle является просто lambda *args: None.

Функция self.select_data выглядит следующим образом:

def select_data(self):
    for col_name in df.columns:
        if col_name == self.clicked.get():
            self.option_display = col_name

Функция self.select_data просто извлекает вариант, который пользователь выбирает из OptionMenu, но как Могу ли я обновить OptionMenu, чтобы отобразить параметр, выбранный в self.select_data?

В качестве примера, если пользователь выбирает параметр A, как мне обновить OptionMenu, чтобы отобразить A как выбрано?

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Функция selectData() должна иметь следующую сигнатуру:

def selectData(self, selected):
    print(selected)
    # or print(self.clicked.get())
0 голосов
/ 17 июня 2020

Это выведет на консоль выпадающий список. но я предлагаю избегать использования консоли в приложениях, основанных на GUI. создать текстовый индикатор и вывести на него вывод

from tkinter import *
tk = Tk()
def OptionMenu_SelectionEvent(event):
    print(var.get())
    pass
var = StringVar(); var.set("one")
options = ["one", "two", "three"]
OptionMenu(tk, var, *(options), command = OptionMenu_SelectionEvent).pack()
tk.mainloop()
...