У меня возник вопрос о приложении, созданном с помощью tkinter. Приложение практически создано, но теперь добавляется дополнительная опция.Tkinter и многоязычный
Я должен добавить дополнительный язык для имен виджетов и для параметров combobox. Вот фрагмент кода о том, как инициализировать свои виджеты:
DISTRICTS = ["A", "B", "C"]
dist_lable = tkinter.Label(self.parent, text="Seller Name")
dist_name = tkinter.ttk.Combobox(self.parent, textvariable=dist_var, state="readonly",
values=DISTRICTS)
Я хочу добавить радиокнопки \ запись, чтобы дать пользователю возможность выбора языка.
Это приложение также сохраняет некоторые выбранные параметры, когда пользователь закрывает его и загружает настройки при следующем запуске. Функция автозагрузки определена сразу после моего метода init. Я думаю, что я также могу сохранить выбранный пользователем язык в файле конфигурации, а затем использовать эти параметры для использования выбранного языка.
Теперь мне нужно, чтобы выбрать лучший путь для достижения этой цели, но только одно решение, я понял еще: после того, как функция, которая загружает мой предыдущий конфиг переинициализации мое приложение с опцией языка:
Вот пример (предположим, что LANG = AZ
):
ENG, AZ = 1,2
DISTRICTS = ["A", "B", "C"],[["D", "E", "F"]
dist_lable = tkinter.Label(self.parent, text=["Seller Name","Satici Adi"][LANG])
dist_name = tkinter.ttk.Combobox(self.parent, textvariable=dist_var, state="readonly",
values=DISTRICTS[LANG])
В этом решении мое приложение будет инициализирован с языка по умолчанию и будет реиницилизирована либо найти конфигурационный файл или когда пользователь выбирает другой язык в GUI.
Также я думаю, что я могу написать код перед tkinter, который попытается загрузить LANG из файла конфигурации до tkinter mainloop().
Я новичок в программировании и не уверен, что этот способ лучше (потому что я могу избежать повторной инициализации), и просто попросите вас предложить мне новое решение или прокомментировать мое.
Спасибо за ваш ответ. неплохо на самом деле, но мне нужно написать дополнительный код для каждого виджетов (около 40-50), когда __init__ может выполнить эту работу с минимальным изменением кода. –
@Mikhail Tokarev Я добавил метод для 'StringVar()'. Насколько я знаю, ускорения нет. Это то, как он был разработан для работы. – RedFantom
ОК, большое спасибо –