Shelve не выводит сохранённые значения в tkinter

Рейтинг: -1Ответов: 1Опубликовано: 28.03.2023

Ребята, прошу помощи с пониманием работы кода. Ситуация вроде довольно простая, использую shelve, чтобы сохранить данные полученные от введения пользователем информации в окна через tkinter. Однако проблема в том, что при попытке закрыть программу и открыть снова - база данных не хочет ничего показывать. Подскажите, в какую сторону копать? Пробовал так писать код:

bd_games = shelve.open('file')
bd_games['value'] = [Name.get(), combobox_Raiting.get(), combobox_Fan.get()]
bd_games.close()

Даже пробовал создавать отдельно список в переменную Lst и через .append добавлял в неё Name.get() и все остальные, потом:

bd_games['value'] = Lst

Результат в итоге один: <shelve.DbfilenameShelf object at 0x0000011E9549C400> при перезапуске программы и попытке прочитать файл bd_games. Пробовал заглядывать в файл .dat - там даже среди краказябр были латинские слова, что я вводил. То есть он сохраняет в двух вариантах кода информацию, тогда почему при перезапуске выдаёт мне эту ерунду?

Ответы

▲ 2Принят

Результат в итоге один: <shelve.DbfilenameShelf object at 0x0000011E9549C400> при перезапуске программы и попытке прочитать файл bd_games.

Я так понял вы просто пытаетесь напечатать сам объект shelve и получаете стандартный вывод питона об этом объекте - его тип и адрес в памяти. Получите из shelve словарь значений и всё нормально напечатается. Пример:

import shelve

with shelve.open('test.tmp') as test:
    test['test'] = 'тест'
    print(test)
    print(dict(test.items()))

Вывод:

<shelve.DbfilenameShelf object at 0x000001A193FAE190>
{'test': 'тест'}

Первый вывод соответствует тому, как смотрите содержимое shelve вы, а второй вывод - это как нужно его смотреть.