2017-02-04 2 views
1

Ich habe eine Frage über die Anwendung mit tkinter erstellt. Anwendung fast erstellt, aber jetzt muss zusätzliche Option hinzugefügt werden.Tkinter und mehrsprachige

Ich muss zusätzliche Sprache für Widget-Namen und für Combobox-Optionen hinzufügen. Hier ist Code-Schnipsel, wie mein Widgets initialisiert:

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) 

Ich mag Radiobuttons hinzufügen \ Eintrag Benutzer Möglichkeit zu geben, die Sprache zu wählen.

Diese Anwendung speichert auch einige ausgewählte Optionen, wenn Benutzer sie schließen und beim nächsten Start laden. Autoload-Funktion definiert direkt nach meiner init Methode. Ich denke, ich kann auch ausgewählte Sprache von Benutzer in die Konfigurationsdatei speichern und dann diese Optionen verwenden, um ausgewählte Sprache zu verwenden.

Jetzt brauche ich den besten Weg zu wählen, dies zu erreichen, aber nur eine Lösung habe ich herausgefunden noch: nach Funktion, die meine frühere Config lädt Option reinit meine app mit Sprache:

Hier ist Beispiel (angenommen, dass 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]) 

in dieser Lösung meine Anwendung mit Standardsprache initialisiert werden und wird entweder neu initialisiert werden Config-Datei oder, wenn der Benutzer wählen, andere Sprache in GUI finden.

Auch ich denke, dass ich etwas Code vor tkinter schreiben kann, die LANG aus der Konfigurationsdatei vor tkinter Hauptschleife() versuchen wird, zu laden.

Ich bin neu in der Programmierung und nicht sicher, dass dieser Weg am besten ist (weil möglicherweise ich Reinitialisierung vermeiden kann) und nur Sie bitten, mir neue Lösung vorschlagen oder meinen Kommentar.

Antwort

1

Sie können widget.config(**options) verwenden, um den Text im laufenden Betrieb zu ändern. Zum Beispiel:

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

Sie könnten auch versuchen, StringVar()

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

mit Vielen Dank für Ihre Antwort. nicht wirklich schlecht, aber ich muss zusätzlichen Code für jede Widgets schreiben (ca. 40-50), wenn __init__ diese Arbeit mit minimaler Codeänderung erledigen kann. –

+0

@Michail Tokarev Ich habe die Methode für 'StringVar()' hinzugefügt. Soweit ich weiß, gibt es keinen schnelleren Weg. So wurden sie entwickelt. – RedFantom

+0

ok, vielen Dank –