Python / Tkinter Permutation如何跳过空字段

时间:2017-09-21 20:49:08

标签: python python-2.7 python-3.x tkinter permutation

我目前正在开发一个项目,该项目接收来自Tkinter / Python GUI的用户输入并打印出排列。

用户可以填写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()

1 个答案:

答案 0 :(得分: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')]