Rückruf und n Entry-Box-Widgets funktionieren nicht Tkinter

In dem Code unten muss ich alle zurückgegebenen Werte zurückgeben (aber für jede Zeile separat), aber ich habe Lambda ausprobiert und gescheitert und ich bekomme nirgends WIEDER.

Ich habe auch die Callback-Definition, wo es vorher gearbeitet hat und wenn ich in ein Feld klicke, löscht es das graue Schreiben, damit ich weiterhin in schwarz eingeben kann.

Wenn möglich, möchte ich die Wertrückgabe für das Eingabefeld am Ende meiner Callback-Funktion hinzufügen, anstatt 'numberwritten' und 'callback' zu halten. Ist das möglich?

Die Anzahl der hinzugefügten Felder ist gleich self.number_boxes und kann von 1 bis n sein.

Vielen Dank.

AKTUALISIERTES CODE:

self.numbers = [StringVar() for i in xrange(self.number_boxes) ] for i in xrange(self.number_boxes): row = (row_number +add) column = self.column +i key = "%d/%d" % (row,column) self.clicked = ([False] * self.number_boxes) self.choice_title = Label(self.frame_table, bg=self.mycolour, borderwidth=0, width=10) self.choice_title.grid(row=1, column=self.column, columnspan=self.number_boxes, sticky="nsew", padx=1, pady=1) self.choice_titles.append(self.choice_title) self.box[key] = Entry(self.frame_table,bg='white',borderwidth=0, width=10, justify="center", fg='grey') self.box[key].grid(row=row_number+add,column=self.column+i, sticky='nsew', padx=1, pady=1) self.box[key].insert(0, "Value %g" % float(i+1)) self.box[key].bind("<Button-1>", lambda event, key=key, index=i : self.callback(event, key, index)) self.boxes.append(self.box[key]) def callback(self, event, key, index): for not self.clicked[index]: self.box[key].delete(0, END) self.box[key].config(fg='black') self.clicked[index] = True print self.box[key].get() 

2 Solutions collect form web for “Rückruf und n Entry-Box-Widgets funktionieren nicht Tkinter”

Sie haben mindestens ein paar Möglichkeiten. Zum einen können Sie speichern die Eintrag Widgets in einem Dict oder Liste von Listen, dann übergeben Sie den Index in den Rückruf. Beispielsweise:

 self.box = {} for i in xrange(self.number_boxes): row = row_number+add column = self.column+i key = "%d/%d" % (row,column) ... self.box[key] = Entry(...) self.box[key].bind("<Button-1>", lambda event, key=key: self.callback(event, key)) 

Das Wichtigste ist, nicht nur eine Methode zu wählen, die jemand im Internet gibt, sondern um das Problem zu verstehen und die Werkzeuge, die du zu lösen hast . Wenn Sie sich die Zeit nehmen, um zu erfahren, wie lambda funktioniert (oder functools.partial ) und ein grundlegendes Verständnis von fundamentalen Datenstrukturen wie Listen und Dicts haben, werden solche Probleme nicht mehr stolpern.

Für Python-Neulinge (wie mich), die durch diese Linie verwirrt sind

 self.numbers = [StringVar() for i in xrange(self.number_boxes) ] 

Das Keyword to google ist "list comprehension", das ist eine Möglichkeit, eine Liste im Format zu initialisieren

[Ausdruck für-Klausel]

Was dem Snippet entspricht

 self.numbers = [] for i in xrange(self.number_boxes) self.numbers.append(StringVar()) 

Mit anderen Worten, es erstellt eine Liste initialisiert als

 [ StringVar, StringVar, StringVar, StringVar, ... ] 

Deren Werte später gesetzt werden.

  • Ändern Sie die Farbe von "tab header" in ttk.Notebook
  • Ändern des Aussehens einer Scrollbar in tkinter (mit ttk Styles)
  • Python tkinter mit ttk Kalender
  • Das Aufrufen einer Tk-Instanz aus einer anderen Tk-Instanz verursacht die Ausgabe von Textvariablen
  • Standardtext sowie Liste textvariable Eintrags-Widget Tkinter
  • So ändern Sie die Farbe der ttk-Taste
  • Wie bekomme ich Tabs eines ttk Notebooks in verschiedenen Reihen?
  • Erstellen Sie resizable / multiline Tkinter / ttk Etiketten mit Word Wrap
  • Kann nicht Hintergrundfarbe ttk python os x mit Stilen setzen
  • Wie man die Tkinter Combobox Auswahl Hervorhebung steuert
  • Gibt es eine Möglichkeit, Tabs eines Notebooks untereinander zu setzen?
  • Python ist die beste Programmiersprache der Welt.