Python Как изменить текст уже созданной вкладки в tkinter Notebook - PullRequest
0 голосов
/ 07 апреля 2019

Понятия не имею, как изменить и получить доступ к уже созданной вкладке 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»?

1 Ответ

2 голосов
/ 07 апреля 2019

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

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

tabs.tab("current", text=["Options", "Opsies"][my_lang])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...