从Tkinter文本字段获取列表,检查重复项并删除任何

时间:2018-11-16 02:48:40

标签: python tkinter get duplicates

我正在尝试清除其重复项的文本字段(每个项都在文本字段的新行中)。我的逻辑是:在文本字段上调用get(),插入到列表中,然后运行一系列缓慢的嵌套循环以检查重复项,然后重新填充文本字段。

有人可以帮助评估我的逻辑并告诉我为什么这不起作用吗?

def checkDup(self):
                clean = []
                dirty = O1.get("1.0", END+'-1c').split("\n")       
                for i in dirty[1:]:
                        if i not in clean:
                                clean.append(i)
                                clean.append("\n")
                O1.delete("1.0", END)
                O1.insert(END, clean)

1 个答案:

答案 0 :(得分:0)

我本可以使用与for循环相同的逻辑来检查重复项。.也许有更好的方法可以做到这一点,但就目前而言,我认为这是一个不错的开始。

查看您的代码:

for i in dirty[1:]: 

为什么您要从列表中的第一项开始,是否需要将其排除在外?如果是这样,则无论如何都可以通过以下方式删除它:

01.delete('1.0', END)

如果需要保留第一行,则可能需要将代码更改为 01.delete('2.0',END)

if i not in clean:
    clean.append(i)
    clean.append('\n')

在这里,您正在创建一个较长的列表,其中包含一堆换行符,每个换行符都被视为列表的成员,很有趣..我弄混了这一部分..经过测试,我发现您的结果仅是结果的一半我做到了。

最后一行:您直接在窗口小部件中推送已更正的列表,这会导致奇怪的结果。

01.insert(END, clean)

以这种方式修复该问题; 01.insert(END,''.join(clean)))会将您的列表分成一个包含以前插入的换行符的字符串,并将所有文本放在正确的位置。