2017-08-08 6 views
0

Ich möchte Informationen aus vielen tkinter Eingabefelder nehmen und dann in ein Wörterbuch, um in eine andere Funktion übergeben werden. Ich möchte, dass der Schlüssel der Name der Variablen (Eintrag) und der Wert der Text ist, der in dem Eingabefeld gespeichert ist. Ich bin in der Lage, alle Informationen zu sammeln, aber die Wörterbuchschlüssel sind nicht korrekt. Die Schlüssel verweisen auf den Eintrag, aber ich möchte, dass der Schlüssel der Variablenname ist, damit ich ihn später in einen Regex überführen kann. Dies ist der Code, den ich bisher benutzt habe.Wie tkinter Eintrag Informationen zu sammeln und in Wörterbuch eingeben

import tkinter as tk 

class ExApp(tk.Tk): 

    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 

     # Build the container 
     container = tk.Frame(self) 
     container.pack(fill='both', expand=True) 
     container.grid_columnconfigure(0, weight=1) 
     container.grid_rowconfigure(0, weight=1) 

     self.frames = {} 

     frame = StartPage(container, self) 
     self.frames[StartPage] = frame 
     frame.grid(column = 0, row=0, sticky='nsew') 

     self.show_frame(StartPage) 

    def show_frame(self, cont): 
     frame = self.frames[cont] 
     frame.tkraise() 

class StartPage(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 

     tlabel = tk.Label(self, text='This is just a test') 
     tlabel.pack() 

     pdc1 = tk.Entry(self) 
     pdc1.pack() 

     pdc2 = tk.Entry(self) 
     pdc2.pack() 

     pdc3 = tk.Entry(self) 
     pdc3.pack() 

     pdc4 = tk.Entry(self) 
     pdc4.pack() 

     self.entries = [pdc1, pdc2, pdc3, pdc4] 

     testbutton = tk.Button(self, text = 'test', 
           command= lambda: print(self.collect_entries(self.entries))) 
     testbutton.pack() 

    def collect_entries(self, list = []): 
     self.outputs = {} 
     for entry in list: 
      self.outputs[entry] = entry.get() 
     return self.outputs 

app = ExApp() 

app.mainloop() 

Dies ist nur ein Testskript, aber meine tatsächliche enthält viel mehr Einträge. es endet damit, dass eine große Anzahl von Variablen an eine andere Funktion übergeben wird, aber ich denke, dass es mit einem einzigen Wörterbuch erreicht werden könnte.

Vielen Dank im Voraus.

Antwort

0

Wenn Sie die Namen benötigen, müssen Sie sie als Strings speichern. Zum Beispiel in einer Liste von Tupeln (Name, Eintrag). Dann können Sie ein Wörterbuch aus den Namen und dem Inhalt des Eintrags für diesen Namen erstellen. Mit dict Verständnis, dass ein One-Liner tatsächlich ist:

class StartPage(tk.Frame): 

    def __init__(self, parent, _controller): 
     tk.Frame.__init__(self, parent) 

     tk.Label(self, text='This is just a test').pack() 

     self.entries = list() 
     for name in ['pdc1', 'pdc2', 'pdc3', 'pdc4']: 
      entry = tk.Entry(self) 
      entry.pack() 
      self.entries.append((name, entry)) 

     tk.Button(
      self, 
      text='test', 
      command=lambda: print(self.collect_entries()) 
     ).pack() 

    def collect_entries(self): 
     return {name: entry.get() for name, entry in self.entries} 
+0

Das funktioniert perfekt und wird wirklich mein Skript viel kürzer. Vielen Dank. – thepeach56

Verwandte Themen