首页 > 解决方案 > Python 如何更改 tkinter Notebook 中已创建选项卡的文本

问题描述

我不知道如何更改和访问已创建的 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 记事本选项卡中的文本?

标签: pythonpython-3.xtkinter

解决方案


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

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

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

推荐阅读