2017-02-04 16 views
1

У меня возник вопрос о приложении, созданном с помощью 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().

Я новичок в программировании и не уверен, что этот способ лучше (потому что я могу избежать повторной инициализации), и просто попросите вас предложить мне новое решение или прокомментировать мое.

ответ

1

Вы можете использовать widget.config(**options), чтобы изменить текст на лету. Например:

# New language chosen here 
dist_label.config(text=["Seller name", "Naam verkoper"][LANG]) 

Вы также можете попробовать использовать StringVar()

var = Tkinter.StringVar() 
var.set(["Seller name", "Naam verkoper"][LANG]) 
lbl = Tkinter.Label(root, textvariable=var) 
+0

Спасибо за ваш ответ. неплохо на самом деле, но мне нужно написать дополнительный код для каждого виджетов (около 40-50), когда __init__ может выполнить эту работу с минимальным изменением кода. –

+0

@Mikhail Tokarev Я добавил метод для 'StringVar()'. Насколько я знаю, ускорения нет. Это то, как он был разработан для работы. – RedFantom

+0

ОК, большое спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^