2017-08-08 54 views
0

我想從很多tkinter輸入框中獲取信息,然後將其放入字典中以傳遞到不同的函數中。我希望鍵是變量(條目)的名稱,並且該值是存儲在輸入框中的文本。我能夠收集所有信息,但字典鍵不正確。這些鍵可以引用Entry,但我希望鍵是變量名,以便稍後將它傳遞給正則表達式。這是迄今爲止使用的代碼。如何收集tkinter條目信息並輸入詞典

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() 

這只是一個測試腳本,但我的實際包含更多的條目。它最終會將大量變量傳遞給另一個函數,但我認爲可以通過單個字典來實現。

預先感謝您。

回答

0

如果您需要名稱,則必須將它們存儲爲字符串。例如在元組列表(名稱,條目)中。然後,您可以根據該名稱的條目名稱和內容創建一本詞典。隨着字典的理解,這是一個單線實際上:

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

這是完美的作品,將真正使我的腳本更短。謝謝。 – thepeach56