1

Тема: проблема з методом text-у бібліотеки tkinter

Проблема з кнопкою search. Якщо з текстового поля забрати текст і здійснити його пошук у текстовому файлі, то вибиває "Пошук не дав результатів" при тому, що якщо вручну ввести (в 17-му рядку) точно те ж саме значення все ідеально запрацює.
Підозрював, що повертало не у форматі str і взяв inp в str(), але не допомогло.

Існує три файла main.py , file_work.py i password.txt. Всі лежать в одній папці. В password.txt строка "eff1c - dfg". Для тестових даних брав "eff".

P's. Так як тут можна загрузити тільки один файл - я закину (тільки потрібні) функції з file_work.py в якості тексту/коду

def search_in_arr(arr, search_query):           # пошук по масиву
    arr_out = []                                # вихідні дані
    for i in range(len(arr)):                   # цикл пошуку подібних елементів в масиві
        if search_query in arr[i]:
            arr_out.append(arr[i])
    if len(arr_out) == 0:                       # якщо не було знайдено потрібних даних
        return 0
    else:
        return arr_out

def search(search_query):                      # пошук даних
    text = open("password.txt", "r")
    data = (text.read()).split(";")
    text.close()
    results_search = search_in_arr(data, search_query)
    if results_search != 0:
        return ("\n".join(results_search))
    else:
        return "Пошук не дав результатів"
Post's attachments

main.py 1.35 kb, 215 downloads since 2019-10-16 

2 Востаннє редагувалося koala (17.10.2019 07:09:26)

Re: проблема з методом text-у бібліотеки tkinter

Додаємо для дебаґґінґу

def search_text():                      # не працює !!!
    inp = text_window.get(1.0, END)
    print(repr(inp)) #<<<<<<<<<<<<<<<<<<<<<

Консоль пише:

================= RESTART: C:\Users\Pavlo\Downloads\main.py =================
'A\n'

Ага, там зайвий символ кінця рядка додався ('\n'). Гадаю, у файлі якщо і є символи кінця рядка, то не після того, що ви шукали. Ліки:

inp = text_window.get(1.0, END).strip()

Але це - якщо буде один рядок. Якщо користувач введе кілька рядків — самі вже думайте.

Крім того, search_in_arr повертає 0 замість пустого масиву. Нащо? if чудово вміє перевіряти масиви на пустоту, False, None, 0, "" і [] - брати-близнюки:

def search(search_query):
    ...
    if results_search:             #так працює і зараз, і з пропонованими далі змінами
        return "\n".join(results_search)
    else:
        return "Пошук не дав результатів"

def search_in_arr(arr, search_query):
    ...
    return arr_out #замість if len(arr_out)...

Ну і в цілому

def search_in_arr(arr, search_query):
    return [item for item in arr if search_query in item]
Подякували: Eff1c, leofun012

3

Re: проблема з методом text-у бібліотеки tkinter

І навіть

return "\n".join(results_search) or "Пошук не дав результатів"
Подякували: Eff1c1

4

Re: проблема з методом text-у бібліотеки tkinter

Дуже дякую)

koala написав:
return "\n".join(results_search) or "Пошук не дав результатів"

Нажаль це не працює
Залишив

    if results_search:
        return "\n".join(results_search)
    else:
        return "Пошук не дав результатів"

5

Re: проблема з методом text-у бібліотеки tkinter

Працює, якщо замість 0 повертати пустий список, як я й писав.

Подякували: Eff1c1