Tkinter OptionMenu (Полное руководство)

В этом руководстве по Python мы узнаем все о виджете Python Tkinter OptionMenu .

 Виджет OptionMenu также называется раскрывающимся списком или полем со списком. Мы будем изучать все методы на примерах.

Меню опций Python Tkinter

  • OptionMenu в Python Tkinter используется для создания выпадающего меню в приложении.
  • Он занимает меньше места и отображает пользователю несколько вариантов. Пользователи могут выбрать только один элемент из списка элементов.
  • Единственным недостатком OptionMenu является то, что он не может обрабатывать большие данные. Поскольку раскрывающийся список ограничен размером экрана. Таким образом, в случае больших данных используется Listbox, поскольку он обеспечивает функцию прокрутки.
  • Вот синтаксис OptionMenu в Python Tkinter

OptionMenu(
    master, 
    variable, 
    value, 
    *values, 
    **kwargs
    )
  • master — это окно, в котором вы хотите разместить OptionMenu. Это может быть главное окно, дополнительное окно или фрейм.
  • переменная означает, что значение виджета не фиксировано, оно будет постоянно меняться. переменная может быть реализована следующим образом:
    • StringVar() – Содержит строку; значение по умолчанию “”
    • IntVar() — содержит целое число; значение по умолчанию 0
    • DoubleVar() — содержит значение с плавающей запятой; значение по умолчанию 0,0
    • BooleanVar () — содержит логическое значение, возвращает 0 для False и 1 для True
  • значение зависит от типа переменной, если переменная StringVar(), то значением будет любое имя или набор символов.
  • *value — это имя списка, в котором мы сохранили все параметры.
  • чтобы увидеть полную документацию, запустите приведенный ниже код.
from tkinter import *
help(OptionMenu)

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

Python Tkinter OptionMenu получить значение

  • В этом разделе мы узнаем, как получить значение, выбранное пользователем в Python Tkinter OptionMenu .
  • OptionMenu отображает несколько параметров, но пользователь может выбрать только один. Итак, чтобы узнать вариант, выбранный пользователем, мы используем метод get() .
  • get() применяется к переменной, назначенной OptionMenu, и возвращает текущую выбранную опцию в OptionMenu.

Пример метода get() в Python Tkinter:

В этом примере метод get() используется для извлечения информации, хранящейся в OptionMenu в Python Tkinter. Здесь мы упомянули точный код для использования метода get(), также мы создали полную программу, основанную на методе get() .

def display_selected(choice):
    choice = variable.get()
    print(choice)

Вот полный программный код для реализации метода get() в Python tkinter.

from tkinter import *

ws = Tk()
ws.title('PythonGuides')
ws.geometry('400x300')
ws.config(bg='#F2B90C')

def display_selected(choice):
    choice = variable.get()
    print(choice)

countries = ['Bahamas','Canada', 'Cuba','United States']

# setting variable for Integers
variable = StringVar()
variable.set(countries[3])

# creating widget
dropdown = OptionMenu(
    ws,
    variable,
    *countries,
    command=display_selected
)

# positioning widget
dropdown.pack(expand=True)

# infinite loop 
ws.mainloop()

Ширина Python Tkinter OptionMenu

  • В этом разделе мы узнаем, как управлять шириной Python Tkinter OptionMenu .
  • Ширина — это правое и левое пространство виджета, и ее настройка в соответствии с потребностями приложения важна, поскольку она придает приложению более приятный вид.
  • используя параметр ширины в виджете OptionMenu, мы можем изменить ширину. OptionMenu не принимает ширину напрямую, поэтому вам нужно использовать метод конфигурации .

Пример ширины OptionMenu в Python Tkinter

Вот пример того, как мы можем изменить ширину OptionMenu в Python Tkinter. В этом коде мы создали функцию, которая изменит ширину OptionMenu. Пользователь может выбрать размер из опций, и OptionMenu будет изменен на этот размер.

from tkinter import *

ws = Tk()
ws.title('PythonGuides')
ws.geometry('400x300')
ws.config(bg='#F26849')

def change_width(choice):
    choice = variable.get()
    dropdown.config(width=choice)

# width choices available.
width_size = [10, 15, 20, 25, 30]

# setting variable for Integers
variable = IntVar()

# creating widget
dropdown = OptionMenu(
    ws,
    variable,
    *width_size,
    command=change_width
)
# positioning widget
dropdown.pack(expand=True)

# infinite loop 
ws.mainloop()

В этом выводе отображаются два изображения. Левое изображение имеет ширину, установленную на 10, и когда значение изменяется с 10 на 15, ширина OptionMenu также увеличивается на правом изображении.

Стиль Python Tkinter OptionMenu

  • В этом разделе мы узнаем, как применить стиль к OptionMenu в Python Tkinter.
  • Стиль — это цвет, шрифт, ширина и другие компоненты для улучшения внешнего вида OptionMenu в Python Tkinter.

Пример стиля OptionMenu в Python Tkinter:

  • В этом выводе мы увеличили ширину и предоставили цвет для OptionMenu в Python. Цвет можно изменить, изменив параметр в OptionMenu в Python Tkinter.
  • Вот точный код, который используется для изменения высоты, ширины и цвета OptionMenu в Python Tkinter. В этом раскрывающемся списке кода находится переменная, назначенная OptionMenu.
dropdown.config(width=10)
dropdown.config(height=2)
dropdown.config(bg='light blue')

Вот полный код программы, созданной для реализации параметра стиля в OptionMenu в Python Tkinter.

from tkinter import *

ws = Tk()
ws.title('PythonGuides')
ws.geometry('400x300')
ws.config(bg='#BF7C41')

def change_color(choice):
    choice = variable.get()
    dropdown.config(bg=choice)


# color choices available.
color_list = ['aquamarine', 'light blue', 'olive drab', 'gray']

# setting variable for Integers
variable = StringVar()
variable.set(color_list[1])


# creating widget
dropdown = OptionMenu(
    ws,
    variable,
    *color_list,
    command=change_color
)
dropdown.config(width=10)
dropdown.config(height=2)
dropdown.config(bg='light blue')

# positioning widget
dropdown.pack(expand=True)

# infinite loop 
ws.mainloop()

В этом выводе цвет OptionMenu изменяется при изменении параметров. Кроме того, высота и ширина, примененные к нему, придают хороший вид всему приложению.

Команда Python Tkinter OptionMenu

  • В этом разделе мы узнаем о необходимости и использовании команды Python Tkinter OptionMenu .
  • Команда используется для назначения функции обратного вызова в OptionMenu Это позволяет вам запускать функцию, если конкретный параметр выбран в OptionMenu.

Пример команды OptionMenu в Python Tkinter:

В этом примере пользователь может выбрать цвет приложения из OptionMenu. Фон окна изменится на выбранный цвет.

from tkinter import *

ws = Tk()
ws.title('PythonGuides')
ws.geometry('400x300')
ws.config(bg='#F26849')

def change_color(choice):
    choice = variable.get()
    ws.config(bg=choice)


# color choices available.
color_list = ['red', 'green', 'yellow', 'blue', 'pink']

# setting variable for Integers
variable = StringVar()

# creating widget
dropdown = OptionMenu(
    ws,
    variable,
    *color_list,
    command=change_color
)
# positioning widget
dropdown.pack(expand=True)

# infinite loop 
ws.mainloop()

Вот вывод приведенного выше кода, вы можете видеть, что цвет окна можно изменить, выбрав любой цвет из OptionMenu в Python Tkinter.

Значение параметра Python Tkinter

  • Python Tkinter OptionMenu предлагает метод set(), который позволяет установить значение по умолчанию в OptionMenu.
  • Метод set() можно применить к переменной, и для этого требуется элемент из списка, который вы хотите отобразить по умолчанию.

Пример команды OptionMenu с параметром set value:

В этом примере мы установили страну по умолчанию как «США». Поэтому, если пользователь не выберет какую-либо опцию, значение по умолчанию будет принято как США (из списка) в OptionMenu.

from tkinter import *

ws = Tk()
ws.title('PythonGuides')
ws.geometry('400x300')
ws.config(bg='#597678')


# choices available with user.
countries = ['Bahamas','Canada', 'Cuba', 'Dominica', 'Jamaica', 'Mexico', 'United States']

# setting variable for strings
variable = StringVar()

# установите страну по умолчанию Например как United States
variable.set(countries[6])

#  creating widget
dropdown = OptionMenu(
    ws,
    variable,
    *countries
)
# positioning widget
dropdown.pack(expand=True)

# infinite loop 
ws.mainloop()

В этом выводе изображение слева показывает OptionMenu, когда не назначено значение по умолчанию, в то время как изображение справа показывает автоматически выбранное «United States. Поэтому это делается с помощью метода set() в Python Tkinter.

Событие изменения Python Tkinter OptionMenu

Событие — это изменение, произошедшее в ответ на выполненное действие. В OptionMenu каждое изменение опции называется событием. С помощью переменной мы можем получить информацию о произошедших изменениях.

Пример события изменения OptionMenu в Python Tkinter:

В этом примере изменения будут отображаться на терминале. Нижеприведенный код отвечает за отчет обо всех изменяющихся событиях.

def check(*args):
    print(f"the variable has changed to '{variable.get()}'")

variable = StringVar(value='United States')
variable.trace('w', check)

Вот полный код программы, которая будет отображать измененные журналы событий в Python Tkinter.

from tkinter import *

ws = Tk()
ws.title('PythonGuides')
ws.geometry('400x300')
ws.config(bg='#597678')

def check(*args):
    print(f"the variable has changed to '{variable.get()}'")

variable = StringVar(value='United States')
variable.trace('w', check)


# choices available with user.
countries = ['Bahamas','Canada', 'Cuba', 'Dominica', 'Jamaica', 'Mexico', 'United States']

# set default country as United States
variable.set(countries[6])

#  creating widget
dropdown = OptionMenu(
    ws,
    variable,
    *countries
)
# positioning widget
dropdown.pack(expand=True)

# infinite loop 
ws.mainloop()

В этом выводе при каждом изменении опции в OptionMenu на экране терминала появляется сообщение.

Python Tkinter OptionMenu отключить

  • Python Tkinter OptionMenu предоставляет состояние метода, с помощью которого OptionMenu может быть выделен серым цветом . После выделения серым цветом все функции OptionMenu отключаются. Никакие изменения не произойдут при нажатии, выпадающий список не будет отображаться.
  • Государство предоставляет два варианта:
    • disabled — отключает виджет OptionMenu в Python Tkinter.
    • нормальный — включает виджет OptionMenu в Python Tkinter.

Пример отключения OptionMenu в Python Tkinter:

В этом примере мы создали флажок и установили правила: если флажок установлен, то OptionMenu находится в нормальном состоянии, а если флажок снят или снят, то OptionMenu перейдет в отключенное состояние.

Эта функция отвечает за изменение состояния виджета OptionMenu в Python Tkinter.

def changeState():
    if checkVar.get() == 1:
        dropdown.configure(state='normal')
    else:
        dropdown.configure(state='disabled')

Вот полный код программы.

from tkinter import *

ws = Tk()
ws.title('PythonGuides')
ws.geometry('400x300')
ws.config(bg='#393C73')

def changeState():
    if checkVar.get() == 1:
        dropdown.configure(state='normal')
    else:
        dropdown.configure(state='disabled')

variable = StringVar()
checkVar = IntVar()

checkVar.set(1)

# checkbutton widget
cb = Checkbutton(
    ws, 
    text = "Enable/Disable OptionMenu", 
    variable = checkVar,
    onvalue = 1, 
    offvalue = 0, 
    height=2,
    width=30,
    command=changeState
    )
cb.pack(expand=True)

# choices available with user.
countries = ['Bahamas','Canada', 'Cuba', 'Dominica', 'Jamaica', 'Mexico', 'United States']

# set default country as United States
variable.set(countries[6])

#  creating widget
dropdown = OptionMenu(
    ws,
    variable,
    *countries
)
# positioning widget
dropdown.pack(expand=True)

# infinite loop 
ws.mainloop()

В выходных данных на левом изображении установлен флажок или флажок, и пользователь может щелкнуть и управлять виджетом OptionMenu в Python Tkinter. Но на правом изображении флажок отключен, и теперь OptionMenu неактивен. 

Установите флажок еще раз, чтобы вернуть OptionMenu в рабочее состояние.

Трассировка Python Tkinter OptionMenu

Трассировка аналогична разделу событий изменений, трассировка просто означает отслеживание изменений, произошедших в виджете OptionMenu в Python Tkinter.

Пример события изменения OptionMenu в Python Tkinter:

В этом примере изменения будут отображаться на терминале. Упомянутый ниже код отвечает за отслеживание и отчетность обо всех изменениях, произошедших в виджете OptionMenu в Python Tkinter.

def check(*args):
    print(f"the variable has changed to '{variable.get()}'")

variable = StringVar(value='United States')
variable.trace('w', check)

Вот полный код для реализации трассировки в виджете OptionMenu в Python Tkinter.

from tkinter import *

ws = Tk()
ws.title('PythonGuides')
ws.geometry('400x300')
ws.config(bg='#597678')

def check(*args):
    print(f"the variable has changed to '{variable.get()}'")

variable = StringVar(value='United States')
variable.trace('w', check)


# choices available with user.
countries = ['Bahamas','Canada', 'Cuba', 'Dominica', 'Jamaica', 'Mexico', 'United States']

# set default country as United States
variable.set(countries[6])

#  creating widget
dropdown = OptionMenu(
    ws,
    variable,
    *countries
)
# positioning widget
dropdown.pack(expand=True)

# infinite loop 
ws.mainloop()

В этом выводе при каждом изменении опции в OptionMenu на экране терминала появляется сообщение.

Цвет Python Tkinter OptionMenu

В этом разделе мы увидим, как применить цвет к OptionMenu в Python Tkinter. Применение цвета является частью стилизации виджета.

Пример цвета OptionMenu в Python Tkinter:

В этом примере цвет виджета OptionMenu можно изменить, изменив параметр виджета OptionMenu в Python Tkinter.

from tkinter import *

ws = Tk()
ws.title('PythonGuides')
ws.geometry('400x300')
ws.config(bg='#BF7C41')

def change_color(choice):
    choice = variable.get()
    dropdown.config(bg=choice)


# color choices available.
color_list = ['aquamarine', 'light blue', 'olive drab', 'gray']

# setting variable for Integers
variable = StringVar()
variable.set(color_list[1])


# creating widget
dropdown = OptionMenu(
    ws,
    variable,
    *color_list,
    command=change_color
)
dropdown.config(width=10)
dropdown.config(height=2)
dropdown.config(bg='light blue')

# positioning widget
dropdown.pack(expand=True)

# infinite loop 
ws.mainloop()

В этом выводе цвет OptionMenu изменяется при изменении параметров. Кроме того, высота и ширина, примененные к нему, придают хороший вид всему приложению.