2016-08-04 7 views
-1

Ich habe nach ein paar Stunden gesucht, aber kann nicht jemanden mit dem gleichen Problem finden. Meine Frage kommt nach dem Code.Holen Sie sich den Eingabetext von Eintrag Widget in Tkinter und verwenden Sie

class Interface: 
    def __init__(self, root): 
      --- Stuff Here --- 
      self.hEntry = Entry(lFrame) 
      self.hEntry.bind("<Return>", self.aMethodToGetText) 
      --- Stuff Here --- 

    def aMethodToGetText(self, event): 
      return event.widget.get() 

    def anotherMethod(self): 
      --- Stuff Here --- 
      self.hEntry.pack() 
      h = self.aMethodToGetText()?????????????????? 
      --- Stuff Here --- 

Ich möchte meine Variable h den Wert, dass die Methode aMethodToGetText kehrt geben. Nennt es wie das wird OFC einem Fehler geben:

Typeerror: aMethodToGetText() 1 erforderlich Positions Argument fehlt: 'Ereignis'

Mit h = self.aMethodToGetText (self.hEntry) und Entfernen Widget. funktioniert auch nicht.

Es kann leicht gelöst werden, wenn Sie 1 Eintrag haben. Aber ich habe viele Entrys und muss für alle meine Entrys eine allgemeine Text-Getter-Methode erstellen.

EDIT: Also brauche ich eine Funktion für jeden Eintrag? Ich möchte jeden Eintrag in verschiedenen Bedingungen, Funktionen und Slicing verwenden. Deshalb brauche ich für jeden Eintrag eine Variable. Ich kann meinen Code in einer anderen Methode (self) nicht in aMethodToGetText (self, event) verschieben, weil ich nicht möchte, dass die Funktion bei jedem Drücken der Enter-Taste neu beginnt. Wenn ich bei einem beliebigen Eintrag die Eingabetaste drücke, möchte ich, dass sie dasselbe tun. Weisen Sie den Eintrag einer Variablen zu. Jeder Eintrag sollte jedoch einer anderen Variablen zugewiesen werden. Ich muss die Einträge miteinander vergleichen.

EDIT 2:

class Interface: 
    def __init__(self, root): 
      --- Stuff Here --- 
      self.aListForEntries = [] 
      self.hEntry = Entry(lFrame) 
      self.hEntry.bind("<Return>", self.aMethodToGetText) 
      self.aEntry = Entry(lFrame) 
      self.aEntry.bind("<Return>", self.aMethodToGetText) 
      --- Stuff Here --- 

    def aMethodToGetText(self, event): 
      entry = event.widget.get() 
      self.aListForEntries.append(entry) 

    def anotherMethod(self): 
      --- Stuff Here --- 
      self.hEntry.pack() 
      h = self.entryList[0] #IndexError: list index out of range 
      --- Check the first Entry --- 
      self.aEntry.pack() 
      a = self.entryList[1] 
      --- Check the second Entry --- 
      if h == a: 
       Do stuff 
      --- Stuff Here --- 

Ich erhalte eine Fehlermeldung, weil die Liste leer ist, bevor der Benutzer eingeben gedrückt hat. Ich habe versucht, das Skript mit time.sleep(x) vor der Zeile h = self.entryList[0] pausieren, aber das funktioniert nicht. Ich möchte nicht, dass das Programm durch die gesamte anotherMethod(self) läuft, bevor der Benutzer Enter drückt.

+0

@noscreenname der erste Parameter 'self' ist impliziert, da es eine Methode ist - es würde einen Parameter,' event', benötigen. – Delioth

+0

Wenn Sie mehrere Einträge haben, können Sie ein Beispiel für einen solchen Fall angeben. Die Lösung würde sich stark unterscheiden, je nachdem, was Sie für jeden Eintrag tun möchten. Wenn Sie bei einem Eintrag die Eingabetaste drücken, sollten alle dasselbe oder jedes etwas anderes tun? Wenn es anders ist, können Sie keine allgemeine Funktion haben, es sei denn, Sie fügen Bedingungen hinzu, was zu tun ist, wenn dieser oder jener Eintrag verwendet wird. –

+0

@StevenSummers Also brauche ich eine Funktion für jeden Eintrag? Ich möchte jeden Eintrag in verschiedenen Bedingungen, Funktionen und Slicing verwenden. Deshalb brauche ich für jeden Eintrag eine Variable. Ich kann meinen Code nicht in anotherMethod (self) in aMethodToGetText (self, event) verschieben, weil ich nicht möchte, dass die Funktion jedes Mal neu startet, wenn die -Taste gedrückt wird. BEARBEITEN: Wenn ich die Eingabetaste auf einen beliebigen Eintrag drücke, möchte ich, dass sie dasselbe tun, den Eintrag einer Variablen zuweisen. Jeder Eintrag sollte jedoch einer anderen Variablen zugewiesen werden. Ich muss die Einträge miteinander vergleichen. – WildRoyal

Antwort

-2

weiß nicht, ob das funktionieren würde, aber hast du es mit Lambda versucht? so etwas wie:

lambda event, h = event.widget.get(): self.aMethodToGetText(event) 
0

EDIT: Beispiel hat zwei Eintrag Widgets, die das Etikett zu angezeigt, wenn der Inhalt Spiel konfiguriert.

+0

Nicht wirklich was ich will. Nehmen wir an, ich habe 2 Entrys und möchte die Eingaben, die der Benutzer schreibt, mit einer if-Anweisung vergleichen. Wie mache ich das? Siehe mein EDIT 2. – WildRoyal

+0

Ich habe meine Antwort bearbeitet, Ist das was du wolltest? –

+0

Ich möchte einen Eintrag zu der Zeit anzeigen. Ich möchte überprüfen, ob die erste Eingabe korrekt ist, bevor der zweite Eintrag angezeigt wird. Ich habe meinen Beitrag aktualisiert. Mein Code ist 300 Zeilen. Ich möchte meinen Code hier nicht zeigen, tut mir leid. – WildRoyal