2016-07-12 11 views
1

Ich habe ein Wörterbuch für den Wert meiner Combobox erstellt. Ich versuche, .get(keys) zu verwenden, um den Wert zu erhalten, den ich für die Combobox einstelle. Zum Beispiel, wenn ich A auswähle, sollte es Haha What ausdrucken, B sollte Lala Sorry ausdrucken, beide sind die Werte in meinem Wörterbuch, also, wie kann ich meinen Code korrigieren?Erhalte den Wert eines Wörterbuchs nach Auswahl des Combobox-Wertes

from tkinter import * 
from tkinter import ttk 
class Application: 

    def __init__(self, parent): 
     self.parent = parent 
     self.value_of_combo='A' 
     self.combo() 

    def textArea(self, e): 
     self.value_of_combo = self.box.get() 
     # Get the content of the Text widget 
     r=self.thistextArea.get('1.0','1.end') 
     # If it is empty then insert the selected value directly 
     if not r: 
      self.thistextArea.insert(INSERT, self.box_values) 
     # If not empty then delete existing text and insert the selected value 
     else: 
     self.thistextArea.delete('1.0','1.end') 
     self.thistextArea.insert(END, self.box_values) 


    def combo(self): 
     self.box_value = StringVar() 
     mydict={'A':'Haha What','B':'Lala Sorry','C':'Ohoh OMG'} 
     self.box_values=mydict.keys() 
     self.box = ttk.Combobox(self.parent, textvariable=self.box_value,values= mydict,state='readonly') 
     self.box.bind('<<ComboboxSelected>>',self.textArea) 
     self.box.current(0) 
     self.box.grid(column=0, row=0) 
     self.thistextArea=Text(self.parent,height=50,width=50) 
     self.thistextArea.grid(column=0,row=1) 

root = Tk() 
app = Application(root) 
root.mainloop() 

Antwort

3

Um nur die Schlüssel (A, B und C) in der Combobox-Widget anzuzeigen, Sie self.box_values=mydict.keys( müssen) zu self.box_values=list(self.mydict.keys()) und diese Zeile:

self.box = ttk.Combobox(self.parent, textvariable=self.box_value,values= mydict,state='readonly') 

zu (vorbei an der Liste der Schlüssel zu values Option anstelle des Wörterbuch mydict selbst):

self.box = ttk.Combobox(self.parent, textvariable=self.box_value,values= self.box_values,state='readonly') 

Sobald dies erledigt ist, müssen Sie in textArea()get() Methode verwenden, um den Wert des entsprechenden ausgewählten Schlüssels aus dem Combobo Wiget abrufen.

Programm:

Hier ist die Umsetzung des Szenarios oben:

from tkinter import * 
from tkinter import ttk 
class Application: 

    def __init__(self, parent): 
     self.parent = parent 
     self.value_of_combo='A' 
     self.combo() 

    def textArea(self, e): 
     self.value_of_combo = self.box.get() 
     # Get the content of the Text widget 
     #print(self.mydict.get(self.value_of_combo)) 
     r=self.thistextArea.get('1.0','1.end') 
     # If it is empty then insert the selected value directly 
     if not r: 
      self.thistextArea.insert(INSERT, self.mydict.get(self.value_of_combo)) 
     # If not empty then delete existing text and insert the selected value 
     else: 
      self.thistextArea.delete('1.0','1.end') 
      self.thistextArea.insert(END, self.mydict.get(self.value_of_combo)) 


    def combo(self): 
     self.box_value = StringVar() 
     self.mydict={'A':'Haha What','B':'Lala Sorry','C':'Ohoh OMG'} 
     self.box_values=list(self.mydict.keys()) 
     #print(self.box_values) 
     self.box = ttk.Combobox(self.parent, textvariable=self.box_value,values= self.box_values,state='readonly') 
     self.box.bind('<<ComboboxSelected>>',self.textArea) 
     self.box.current(0) 
     self.box.grid(column=0, row=0) 
     self.thistextArea=Text(self.parent,height=50,width=50) 
     self.thistextArea.grid(column=0,row=1) 

root = Tk() 
app = Application(root) 
root.mainloop() 
+0

Danke für die Lösung kann ich wissen, was die Option 1.0 und 1.end bedeuten? –

+0

Gern geschehen. Die Schreibweise '1.0' bedeutet erste Zeile und erste Spalte (in einem Text-Widget beginnen Zeilen mit 1 und Zeilen beginnen mit 0), also bezieht sich dies auf das erste Zeichen des in Zeile 1 vorhandenen Texts. Für die Schreibweise' 1.End ', stellt es den zweiten Index dar, den wir an die entsprechende Methode übergeben (' delete() 'und' get() '). So ist '1.0' der Startindex, während' 1.End' der Endindex ist. Ich empfehle Ihnen, [diese Seite] (http://effbot.org/tkinterbook/text.htm) zu lesen, um mehr über diese Methoden, Notationen und Indizes zu erfahren. –