Tkinter переносит выбранную опцию из optionMenu в переменную для дальнейшего использования

при создании выпадающего меню в "tkinter" вот так:

options = ['0',
           '1',
           '2',
           '3',
           '4']

option = tk.OptionMenu(menu, var, *options)

var.set('Select number')

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


person Coder Cody    schedule 17.10.2018    source источник
comment
Ответить на ваш вопрос можно, просто прочитав имеющуюся документацию. С какой частью проблемы вы боретесь? Похоже, вы уже знаете, как связать виджет с переменной.   -  person Bryan Oakley    schedule 17.10.2018


Ответы (1)


Вопрос: как я могу взять целое число, выбранное пользователем

Вы определяете options как список str, поэтому выбранная опция присваивается данному textvariable в вашем коде var. Чтобы получить integer от str, выполните:

option_int = int(var.get())

Рабочий пример, как получить index выбранного OptionMenu элемента:

import tkinter as tk

class myOptionMenu(tk.OptionMenu):
    def __init__(self, parent):
        self.item = tk.StringVar()
        self.item.set("Select option")  # default value
        self.index = None
        self.options = ['0. Option', '1. Option', '2. Option', '3. Option']

        super().__init__(parent, self.item, *self.options, command=self.command)
        self.pack()

    def command(self, v):
        # Loop 'options' to find the matching 'item', return the index
        self.index = [i for i, s in enumerate(self.options) if s == self.item.get()][0]
        print("def option({}), variable.get()=>{}, index:{}".format(v, self.item.get(), self.index))
        # >>> def option(2. Option), variable.get()=>2. Option, index:2

root = tk.Tk()

option = myOptionMenu(root)

root.mainloop()

Использование в основном цикле:

if option.item.get() == '2. Option':
    print("Option {} is selected.".format(option.item.get()))

if option.index == 2:
    print("Option {} is selected.".format(option.index))

Протестировано с Python: 3.5.3 - TkVersion: 8.6

person stovfl    schedule 18.10.2018