Python如何在Tkinter Notebook中更改已创建的选项卡的文本

时间:2019-04-07 11:43:33

标签: 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记事本选项卡中更改文本?

1 个答案:

答案 0 :(得分:2)

ttk窗口小部件有时的工作方式与tk窗口小部件有所不同。对于笔记本标签,可以使用tab方法设置标签的选项。如果您不提供选项卡索引以外的任何参数,则此方法将返回表示选项的字典。您的代码正在更改字典,更改字典不会更改实际的小部件。

要更改选项,请将选项名称和新值作为tab方法的参数。例如:

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