Функция сохранения в игре (в игре tkinter)

#python #tkinter

#python #tkinter

Вопрос:

Я работаю над текстовой игрой на Python с использованием Tkinter. Все время окно содержит ярлык и несколько кнопок (в основном 3). Если бы у него не было графического интерфейса, я мог бы просто использовать Pickle или даже Python i / o (.txt-файл) для сохранения данных и последующего их извлечения. Но каков наилучший способ сообщить программе загружать точные виджеты без потери привязок, команд кнопок, классов и т. Д.? PS: Кнопки приводят к очистке фрейма виджетов и вызову новых виджетов. Я подумываю о том, чтобы присвоить переменной лямбду (команду кнопки), а затем сохранить ее (рассол?) чтобы иметь возможность загружать его в будущем и получать правильные точки в сюжете. Должен ли я пойти на это или есть лучший, альтернативный способ добиться этого? (Если использование lambda может сработать, я все равно был бы признателен за то, чтобы увидеть ваш способ сделать это.)

Комментарии:

1. Почему вы не можете сохранить данные в файл и иметь возможность перезагрузить существующую игру? Что мешает вам это сделать?

2. Прочитайте здесь о различных типах форматов файлов конфигурации и о том, какие из них вы должны использовать: martin-thoma.com/configuration-files-in-python

3. Вы все еще работаете над этим проектом? У меня есть проект, который позволит вам делать именно такие вещи, используя JSON в качестве разметки . Вы можете загружать новый JSON на лету, динамически изменяя представления. Он все еще находится на ранних стадиях, но включает привязку к данным и командам: github.com/badkraft/razorware.pixelbox

Ответ №1:

Вам нужно сохранить материал в каком-то конфигурационном файле. В общем случае я бы рекомендовал JSON и YAML в качестве форматов файлов, а также ini для удобства синтаксического анализа.

Кроме того, не забывайте о реестре Windows (хотя переносимость тогда потеряна).

Комментарии:

1. Я бы вообще не рекомендовал YAML. Слишком сложно и грязно использовать. Я бы предпочел использовать JSON ConfigParser или .py файл

Ответ №2:

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

Создайте новый класс с именем Manager, создайте две функции _setNewWidget, _deleteWidget, например:

 class Manager():
    def __init__(self, *args, **kwargs):
        objects = {}

    def _createButton(self, frame, id, function, etc):
        # object[id] = frame.Button(function, etc, ...) i dnt' know sintaxes, but this is the way

    def _deleteWidget(self, id):
        # object[id] = None or del(object[id]) same here
 

Чтобы получить, просто:

 manager = Manager()
manager._createWidget("button_fase_one", frameTk, etc, etc)
manager.objects["button_fase_one"].changeFrame() # example
print(manager.objects["button_fase_one"].text)
 

Таким образом, вы можете создавать объекты и создавать их там, где хотите.

Чтобы сохранить данные, просто создайте другую функцию и сохраните как json.