Python/Tkinter排列如何跳过空字段

Python/Tkinter排列如何跳过空字段,python,python-2.7,python-3.x,tkinter,permutation,Python,Python 2.7,Python 3.x,Tkinter,Permutation,我目前正在从事一个项目,该项目从Tkinter/Python GUI接收用户的输入,并打印出排列 用户可以填写其中的6个输入字段,这些字段会显示其输入的排列。这个功能运行得非常好 但是,当用户将一些输入字段留空时,会由于空格被置换而产生重复问题 如何使保留为空的输入字段被跳过并忽略。输出将是仅具有条目的字段的排列。。。e、 例如,当3个字段留空时,3个单词而不是6个单词的排列 from itertools import permutations from itertools import cha

我目前正在从事一个项目,该项目从Tkinter/Python GUI接收用户的输入,并打印出排列

用户可以填写其中的6个输入字段,这些字段会显示其输入的排列。这个功能运行得非常好

但是,当用户将一些输入字段留空时,会由于空格被置换而产生重复问题

如何使保留为空的输入字段被跳过并忽略。输出将是仅具有条目的字段的排列。。。e、 例如,当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()
从itertools导入置换
来自itertools进口链
从tkinter进口*
进口稀土
字段=‘活动’、‘广告组’、‘位置’、‘辅助组’、‘辅助组2’,
“辅助组3”
#makeForm函数
def makeForm(根,字段):
条目=[]
对于字段中的字段:
行=帧(根)
lab=标签(行,宽度=20,文本=field,锚点=w')
ent=条目(行)
行包装(侧面=顶部,填充=X,padx=10,pady=10)
实验室包装(侧面=左侧)
ent.pack(侧面=右侧,展开=是,填充=X)
条目。追加((字段,ent))
返回条目
#精确匹配函数。
def exactMatch(条目):
words=[entry[1]。条目中的条目的get()]
排列=[p代表排列中的p((单词))]
x1=str(perms)
perms2=x1。替换(“,”,“”)#取出引号
perms3=perms2.replace(“,”)#取出引号
perms4=perms3。替换(“(”,“[”)
perms5=perms4。替换(')',']\n')
perms6=perms5。替换(“,”)
打印(“精确匹配:”)
打印('-------------')
打印(perms6)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
root=Tk()
ents=makeForm(根,字段)
root.bind(“”,(lambda事件,e=ents:fetch(e)))
#精确匹配按钮
b2=按钮(根,text='精确匹配',command=(lambda e=ents:exactMatch(e)))
b2.组件(侧面=左侧,padx=10,pady=10)
#退出按钮
b6=按钮(root,text='Quit',command=root.Quit)
b6.组件(侧面=左侧,padx=10,pady=10)
root.mainloop()

我的回答只会集中在您的主要问题上,即如何跳过空白或仅包含空格的输入字段

我们可以使用
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()
结果:


你可以修改你的理解列表,使其不接受空值,但也许你想清除输入的单词(空格,符号…?)?(也应该在TKTETER中更新一个标签,而不是在控制台上打印一些东西),当您从条目中获取值以移除空白时,可以添加<代码>。替换(“”,“”)< /C>。(
words=[entry[1].get().replace(“,”)替换条目中的条目]
)@PRMoureu谢谢您的建议!我遗漏了很多代码、标签、按钮等来保留它simple@SneakyTurtle这确实解决了这个问题,但是我的烫发需要用空格隔开,而不是别的!您需要提供一个可测试的代码。请提供
[('Time', 'Apple', 'Car'), ('Time', 'Car', 'Apple'), ('Apple', 'Time', 'Car'), ('Apple', 'Car', 'Time'), ('Car', 'Time', 'Apple'), ('Car', 'Apple', 'Time')]