Не устанавливается значение по умолчанию в окне tkinter

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

Упрощённый код:

from tkinter import *
from tkinter import ttk

mainw = Tk()

## ОКНА;
tab_control = ttk.Notebook(mainw)
add_tag = ttk.Frame(tab_control)

tab_control.add(add_tag, text="Add tags")
tab_control.pack(expand=1, fill='both')

default_authors_data = StringVar(value="pixiv")

authors_list_data = ["pixiv", "twitter", "artstation", "devianart", "instagram", "other"]
authors_list = ttk.Combobox(add_tag, values=authors_list_data, textvariable=default_authors_data, state="readonly", width=18)
authors_list.pack()

def description_window():
    popup = Toplevel()
    popup.title("Menu:")

    type_options = ["description", "object", "other", "author", "copyright", "character", "unknown"]
    type_selected_value = StringVar(value="description") ## значение по умолчанию;

    type_combo = ttk.Combobox(popup, values=type_options, textvariable=type_selected_value, state="readonly", width=20, font=("Arial", 13))
    type_combo.pack(side='top', anchor='w', padx=30, pady=10)

descption_window_btn = Button(add_tag, text="Check description", command=description_window, width=16)
descption_window_btn.pack()

mainw.mainloop()

После нажатия кнопки Check description в главном окне, открывается дополнительное окно поверх и там есть выпадающий список, в котором перечислены заданные значения из списка. По умолчанию значение должно выставляться из переменной type_selected_value (description), но вместо этого, никакого значения нет вовсе. Нужно выбирать вручную.

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

Есть ли способ исправить это или какова причина проблемы?


Ответы (1 шт):

Автор решения: Amgarak

Можно банально его установить через set из выбранного элемента в основном окне.

def description_window():
    popup = Toplevel()
    popup.title("Menu:")

    type_options = ["description", "object", "other", "author", "copyright", "character", "unknown"]
    default_value = authors_list.get()  # Через get возвращаем значение из основного окна

    type_combo = ttk.Combobox(popup, values=type_options, state="readonly", width=20, font=("Arial", 13))
    type_combo.set(default_value) # В наглую его устанавливаем
    type_combo.pack(side='top', anchor='w', padx=30, pady=10)

На Pydroid 3 к слову type_selected_value = StringVar(value="description") работает и устанавливает значение по умолчанию. На Win10 параметр textvariable у меня не работает для нового окна, получаю пустой список - нужно выбирать вручную.

Но через set всё работает исправно - type_combo.set("description") значение устанавливается.

→ Ссылка