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