Итак, я хочу, чтобы пользователь мог использовать мою программу на английском языке. Они должны иметь возможность переключаться на свой язык через выпадающее меню. В моей программе всего четыре страницы и несколько надписей на каждой, переводить их с помощью инструментария было бы лишним.
Это то, что я получил до сих пор:
# 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» — нет. Ничего не происходит, я что-то пропустил?
Я немного новичок, поэтому буду признателен за любые рекомендации и / или другие решения!
Один из вариантов, который я могу придумать, - это использовать 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')
Я нашел самый простой способ поделиться данными переменных Tk — объявить (и установить) StringVar()
в вашем корневом классе, а затем передать ссылку на ваш корневой класс любым дочерним классам виджетов (см. здесь). Затем получите доступ к переменной со «Page1» через self.controller.shared_data['search_label_var'].get()
(используя имена из метода, показанного в связанном ответе). В этом ответе ссылка на корневой класс называется controller
, но, естественно, вы можете называть ее как угодно.
Спасибо большое, я тоже нашла. Но ты мне очень помог!!!!
Это похожее решение связь без вас я бы его не нашел. Благодарю вас!
Спасибо за ваш ответ, но теперь у меня возникла такая проблема:
AttributeError: 'Page1' object has no attribute 'search_label_var
Я пробовал:Page1(self).search_label_var.set('Search')
Как я могу изменить метку в разных классах?