получить список из текстового поля Tkinter, проверить наличие дубликатов и удалить все - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь очистить текстовое поле от повторяющихся элементов (каждый элемент находится на новой строке в текстовом поле). Моя логика: вызовите 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 голосов
/ 16 ноября 2018

Я бы использовал ту же логику с циклами for для проверки дубликатов ... возможно, есть что-то лучшее, что можно сделать, но сейчас на нашем уровне я думаю, что это хорошее начало.

просмотр вашего кода:

for i in dirty[1:]: 

Вот почему вы начинаете после первого элемента в вашем списке, его нужно исключить?если это так, вы удаляете его в любом случае с помощью:

01.delete('1.0', END)

Возможно, вам придется изменить код на 01.delete ('2.0', END) , если вам нужно сохранить первыйline.

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

Здесь вы создаете более длинный список с кучей новых строк, каждый из которых считается членом вашего списка, интересно ... Я перепутался с этой частью ... после тестирования я вижу ваширезультаты только вдвое страннее, чем я.

последняя строка: вы толкаете свой исправленный список прямо в свой виджет, что приводит к странному результату.

01.insert(END, clean)

Исправьте это, этопуть; 01.insert (END, '' .join (clean)) это разобьет ваш список на строку, содержащую ранее вставленные символы новой строки, и поместит весь текст в нужное место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...