2016-07-11 16 views
1

Wie kann ich den Combobox-Wert in meinem Textfeld Widget anzeigen?Zeigen Sie einen bestimmten Wert in Textbox nach Combobox ausgewählten Wert in Python

Hier ist meine Codierung, es heißt, ich muss das Event-Argument setzen, also welches Event-Argument soll ich setzen, um meinen Combobox-Wert in meinem Textfeld-Widget anzuzeigen?

from tkinter import * 
from tkinter import ttk 
class Application: 

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

    def textArea(self,event): 
     self.value_of_combo = self.box.get() 
     print(self.value_of_combo) 
     thistextArea=Text(self.parent,height=50,wideth=50) 
     thistextArea.grid(column=0,row=1) 

    def combo(self): 
     self.box_value = StringVar() 
     self.box = ttk.Combobox(self.parent, textvariable=self.box_value,values=('A', 'B', 'C'),state='readonly') 
     self.box.bind('<<ComboboxSelected>>',self.textArea) 
     self.box.current(0) 
     self.box.grid(column=0, row=0) 

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

Haben Sie versucht, mit 'thistextArea.insert()' Text in das Textfeld einfügen? – Delioth

Antwort

1

Das Problem ist nicht über welches Ereignis Argument textArea() Methode übergeben: Sie lieber die folgenden Fehler zu beheben haben:

  1. Zunächst einmal, entfernen Sie den Aufruf von textArea() innerhalb __init__(), es ist eher combo(), die es braucht.
  2. Innerhalb textArea() erstellen Sie jedes Mal ein neues Text-Widget, wenn der Rückruf combo() aufgerufen wird. Sie müssen also die zwei Zeilen, die das Text-Widget erstellen und positionieren, von textArea() zu combo() verschieben.
  3. Sobald dies behoben ist, ist der Algorithmus einfach: Wenn Sie einen Wert aus dem Combobox-Widget auswählen, müssen Sie prüfen, ob das Text-Widget leer ist: Wenn ja, fügen Sie den Wert direkt ein, wenn nicht den vorhandenen Text vor dem Einfügen löschen.

Programm:

Hier ist die Lösung mit den Fehlern behoben:

from tkinter import * 
from tkinter import ttk 
class Application: 

    def __init__(self, parent): 
     self.parent = parent 
     self.value_of_combo='A' 
     self.combo() 
     #self.textArea() <-- This has nothing to do here, remove it 

    def textArea(self, e): 
     self.value_of_combo = self.box.get() 
     print(self.value_of_combo) 
     # 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.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.value_of_combo) 


    def combo(self): 
     self.box_value = StringVar()   
     self.box = ttk.Combobox(self.parent, textvariable=self.box_value,values=('A', 'B', 'C'),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()