#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.