2016-10-16 5 views
2

私はPythonでTkinterを使ってテキストベースのゲームを開発しています。ウィンドウにはラベルといくつかのボタン(主に3)が常に表示されます。 GUIを持っていなければ、PickleやPythonのi/o(.txtファイル)を使ってデータを保存し、後でそれを取得することができます。しかし、バインディング、ボタンのコマンド、クラスなどを失うことなく、正確なウィジェットをロードするようにプログラムに指示する最良の方法は何ですか? P.S .:ボタンを押すと、ウィジェットのフレームが消去され、新しいウィジェットが呼び出されます。私はラムダ(ボタンのコマンド)を変数に代入し、それを保存して(Pickle?)それを将来ロードし、プロットの正しい点を得ることを考えています。私はそれのために行くか、それを達成するためのより良い、代替方法がありますか? (もしlambdaがうまくいくなら、私はあなたのやり方を見てもらえて残念です。)ゲーム内保存機能(tkinterゲーム)

+0

なぜデータをファイルに保存できず、既存のゲームをリロードするオプションがありますか?あなたがそれをやり遂げるのを妨げるのは何ですか? –

+0

さまざまな種類の設定ファイル形式と使用する必要があるものについては、ここをクリックしてください。https://martin-thoma.com/configuration-files-in-python/ – Arbiter

+0

このプロジェクトではまだ作業中ですか?私は*マークアップ*としてJSONを使ってこのようなことをするプロジェクトを持っています。新しいJSONをすぐに読み込んで、ビューを動的に変更することができます。まだ初期段階ですが、データバインディングとコマンドバインディングが含まれています:https://github.com/badkraft/razorware.pixelbox – IAbstract

答えて

1

何かの設定ファイルを保存する必要があります。 generelでは、構文解析を容易にするためにJSONとYAMLをファイル形式としてもお勧めします。

また、Windowsレジストリ(移植性が失われていることもあります)を忘れないでください。

+0

YAMLはまったくお勧めしません。使用するにはあまりにも複雑で乱雑です。私はむしろJSON、 'ConfigParser'や' .py'ファイル – Arbiter

1

私が理解しておいたのは、ウィジェットマネージャが必要な場所に配置し、値を取り出すのが簡単だということでした。

このように、二つの機能、_setNewWidget、_deleteWidgetを行い、Managerと呼ばれる新しいクラスを作成します。ただ、取得するには

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) 

このようにuはオブジェクトやブリットを作成することができますあなたはどこにいたいですか?

データを保存するには、別の機能を作成してjsonとして保存します。

関連する問題