Python как изменить текст уже созданной вкладки в tkinter Notebook

#python #python-3.x #tkinter

#python #python-3.x #tkinter

Вопрос:

Я понятия не имею, как изменить и получить доступ к уже созданному ttk.Вкладка Notebook. Я не знаю, как получить доступ к определенной вкладке, и даже «текущий» не работает. Вот мой код:

 from tkinter import *
from tkinter import ttk

app = Tk()

tabs = ttk.Notebook(app)                        # Create Tab Control

options_tab = ttk.Frame(tabs)                   # Create a tab
tabs.add(options_tab, text='Options')           # Add the tab

tabs.pack(expand=1, fill="both")                 # Pack to make visible

lang_dct = {
    "en": 0,
    "af": 1
}

my_lang = lang_dct['en']
print(my_lang)

# New language chosen here
lang_l = Label(options_tab)
lang_l.config(text=["Choose language",
                    "Kies taal"][my_lang])
lang_l.grid(row=0, column=0)


def on_select(event=None):
    print('----------------------------')
    if event: # <-- this works only with bind because `command=` doesn't send event
        print("event.widget:", event.widget.get())

    global my_lang
    cb = event.widget.get()
    if cb == "English":
        my_lang = 0
    elif cb == "Afrikaans":
        my_lang = 1
    print(my_lang)
    change_lang()


def change_lang():
    lang_l.config(text=["Choose language",
                        "Kies taal"][my_lang])
    print(tabs)
    print(tabs.tab("current"))
    tabs.tab("current")['text'] = ["Options",
                                   "Opsies"][my_lang]


language_cb = ttk.Combobox(options_tab, values=("English", "Afrikaans"))
language_cb.grid(row=1, column=0)
language_cb.bind('<<ComboboxSelected>>', on_select)

app.mainloop()
  

Я могу распечатать текущую вкладку, но никак не могу ее изменить. Как я могу изменить текст на вкладке ttk tkinter Notepad?

Комментарии:

1. Запустите код. вверху у вас есть вкладка «Параметры», я хочу изменить ее на другой язык (в данном случае Opsies) таким же образом, как выбрать языковые изменения на Kies taal

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

Ответ №1:

виджеты ttk иногда работают немного иначе, чем виджеты tk. В случае вкладок notebook вы устанавливаете параметр вкладки с помощью tab метода. Если вы не предоставите никаких аргументов, кроме индекса табуляции, этот метод вернет словарь, представляющий параметры. Ваш код изменяет словарь, изменение словаря не изменяет фактический виджет.

Чтобы изменить параметр, укажите имя параметра и новое значение в качестве аргументов tab метода. Например:

 tabs.tab("current", text=["Options", "Opsies"][my_lang])
  

Комментарии:

1. Спасибо за ответ. Да, у меня проблема с поиском хорошей информации в документе ttk. Из того, что я вижу, если я хочу изменить конкретную вкладку, мне просто нужно использовать integer, правильно? Здесь 0 (первая вкладка) работает нормально.

2. @Gunnm: да, первый аргумент — это то, что определяет вкладку, которую нужно настроить. Вы можете использовать индекс, фрейм, связанный с вкладкой (например: options_tab ), специальный индекс "current" или "end" или даже координату x / y в виде строки в формате "@x,y"