2017-09-21 64 views
0

我目前正在從Tkinter/Python GUI接收用戶輸入並打印出排列的項目。Python/Tkinter排列如何跳過空字段

用戶可以填寫6個輸入字段,這些輸入字段可以輸出其輸入的排列。這個功能工作得很好。

但是,當用戶將幾個輸入字段留空時,由於置換了空白空間,它會產生重複問題。

我該怎麼做才能讓剩下的空字段被忽略並忽略。輸出將是僅具有條目的字段的排列......例如,當3個字段留空時,3個字的排列而不是6個排列。

from itertools import permutations 
from itertools import chain 
from tkinter import * 
import re 

fields = 'Campaign', 'Ad _Group', 'Location', 'Aux_Groups', 'Aux_Groups2', 
'Aux_Groups3' 


#makeForm Function 
def makeForm(root, fields): 
    entries = [] 

    for field in fields: 
     row = Frame(root) 
     lab = Label(row, width=20, text=field, anchor='w') 
     ent = Entry(row) 
     row.pack(side=TOP, fill=X, padx=10, pady=10) 
     lab.pack(side=LEFT) 
     ent.pack(side=RIGHT, expand=YES, fill=X) 
     entries.append((field, ent)) 

    return entries 


#ExactMatch Function. 
def exactMatch(entries): 
    words = [entry[1].get() for entry in entries] 
    perms = [p for p in permutations((words))] 
    x1 = str(perms) 
    perms2 = x1.replace("," , '') #Takes out the Quotations 
    perms3 = perms2.replace("'" , '') #Takes out the Quotations 
    perms4 = perms3.replace("(" , '[') 
    perms5 = perms4.replace(')' , ']\n') 
    perms6 = perms5.replace (" ", "") 


    print("Exact Match:") 
    print('------------') 
    print(perms6) 

if __name__ == '__main__': 
    root = Tk() 
    ents = makeForm(root, fields) 
    root.bind('<Return>', (lambda event, e=ents: fetch(e))) 

    #Exact Match Button 
    b2 = Button(root, text='Exact Match', command=(lambda e=ents: exactMatch(e))) 
    b2.pack(side=LEFT, padx=10, pady=10) 

    #Quit Button 
    b6 = Button(root, text='Quit', command=root.quit) 
    b6.pack(side=LEFT, padx=10, pady=10) 

    root.mainloop() 
+0

你可以治好你的理解列表只接受*不爲空值*但也許你想清理輸入的單詞(空格,符號...)? (你也應該在tkinter中更新一個標籤,而不是在控制檯上打印某些東西) – PRMoureu

+0

當你從條目中獲取值來刪除空白時,你可以添加'.replace(「」,「」)''。 ('words = [entry [1] .get()。replace(「」,「」)用於輸入條目]') – SneakyTurtle

+0

@PRMoureu感謝您的建議!我遺漏了很多我的代碼,標籤,按鈕等等,以保持它簡單 –

回答

1

我的答案只關注於如何跳過空白或只包含空格的輸入字段的主要問題。

我們可以使用strip()從我們從輸入字段獲得的字符串的任一側移除空格。

我們可以使用get()strip()和if語句來檢查新值是否不是「」,然後繼續。

for entry in self.entry_list: 
      x = entry.get().strip() 
      if x != "": 
       self.perm_list.append(x) 

看看下面的代碼:

import tkinter as tk 
from itertools import permutations 

class App(tk.Frame): 
    def __init__(self, master, *args, **kwargs): 
     tk.Frame.__init__(self, master, *args, **kwargs) 
     self.master = master 

     self.entry_list = [] 
     self.perm_list = [] 

     for i in range(5): 
      self.entry_list.append(tk.Entry(self.master)) 
      self.entry_list[i].pack() 

     tk.Button(self.master, text="Perm", command = self.begin_perm).pack() 


    def begin_perm(self): 
     self.perm_list = [] 
     for entry in self.entry_list: 
      x = entry.get().strip() 
      if x != "": 
       self.perm_list.append(x) 

     x = [p for p in permutations(self.perm_list)] 
     print(x)   


if __name__ == "__main__": 
    root = tk.Tk() 
    MyApp = App(root) 
    root.mainloop() 

結果:

enter image description here

[('Time', 'Apple', 'Car'), ('Time', 'Car', 'Apple'), ('Apple', 'Time', 'Car'), ('Apple', 'Car', 'Time'), ('Car', 'Time', 'Apple'), ('Car', 'Apple', 'Time')]