Как изменить несколько меток в нескольких классах с помощью раскрывающегося меню tkinter

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

Это то, что я получил до сих пор:

    # Language Settings
    def display_selected(choice):
        choice = variable.get()
        if choice == "Deutsch":
            languagelabel.config(text=str('Sprache:'))
            Page1(self).label_search.config(text=str('Suche'))

        else:
            languagelabel.config(text=str('Language:'))
            Page1(self).label_search.config(text=str('search'))


    # Dropdown Menu for Languages
    languages = ['Deutsch', 'English']
    variable = StringVar()
    variable.set(languages[0])
    dropdown = OptionMenu(self, variable, *languages, command=display_selected)

Языковая метка в том же классе меняется, а метка search_label в классе «Page1» — нет. Ничего не происходит, я что-то пропустил?

Я немного новичок, поэтому буду признателен за любые рекомендации и / или другие решения!

Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
0
0
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Один из вариантов, который я могу придумать, - это использовать StringVar()s для хранения меток, которые нуждаются в переводе для каждого варианта языка, и присвоение этих переменных каждому параметру textvariable метки.

# EXAMPLE
lang_label_var = tk.StringVar()
label_search = tk.Label(
    textvariable = lang_label_var
    # whatever other attributes
)
search_label_var = tk.StringVar()
languagelabel = tk.Label(
    textvariable = search_label_var
    # whatever other attributes
)

Вы должны иметь возможность set() использовать эти переменные в зависимости от того, какое слово подходит для английского или немецкого языка с аналогичной логикой, следующей за choice = variable.get(). Текст метки для каждого элемента должен автоматически обновляться при установке переменной, назначенной textvariable.

if choice == 'Deutsch':
    lang_label_var.set('Sprache:')
    search_label_var.set('Suche')
elif choice == 'English':
    lang_label_var.set('Language:')
    search_label_var.set('Search')

Спасибо за ваш ответ, но теперь у меня возникла такая проблема: AttributeError: 'Page1' object has no attribute 'search_label_var Я пробовал: Page1(self).search_label_var.set('Search') Как я могу изменить метку в разных классах?

Tom Orrow 17.05.2022 16:46

Я нашел самый простой способ поделиться данными переменных Tk — объявить (и установить) StringVar() в вашем корневом классе, а затем передать ссылку на ваш корневой класс любым дочерним классам виджетов (см. здесь). Затем получите доступ к переменной со «Page1» через self.controller.shared_data['search_label_var'].get() (используя имена из метода, показанного в связанном ответе). В этом ответе ссылка на корневой класс называется controller, но, естественно, вы можете называть ее как угодно.

JRiggles 17.05.2022 17:20

Спасибо большое, я тоже нашла. Но ты мне очень помог!!!!

Tom Orrow 17.05.2022 17:22

Это похожее решение связь без вас я бы его не нашел. Благодарю вас!

Tom Orrow 17.05.2022 17:25

Другие вопросы по теме