私は約110のユーザ選択パラメータを持つwxpythonを使ってGUIアプリケーションを開発しています。ユーザーがこれらのオプションをプロジェクトファイルに保存できるようにしたいので、wxPythonに含まれているPersistenceManagerモジュールを使用することにしました。wxPython PersistenceManagerを使ってパーシスタンスファイルを保存できません
設定を保存するファイル名を指定しない限り、永続性は有効です。つまり、既定値(C:\users\username\AppData\programName\Persistence_Options
)を使用し、終了時に設定を保存するようにしてください。
私がしようとしているのは、ユーザーが設定を保存するファイルを選択できるようにすることです(オプションが異なる複数のプロジェクトがある可能性があるため)。しかし、SetPersistenceFile
メソッドをユーザー指定のファイル名で使用すると、ファイルが保存されず、以下に示すコード行を確実に実行しているにもかかわらず、エラーメッセージは返されません。 (OnSave
関数は、プログラムのメインウィンドウの方法である。)
def OnSave(self, e):
self.dirname = os.getcwd()
if self.ProjectFile == '':
dlg = wx.FileDialog(self, "Save project file", self.dirname, "", "Project configuration file (.prj)|*.prj", wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
if dlg.ShowModal() == wx.ID_CANCEL:
return
else:
self.ProjectFile = os.path.join(dlg.GetDirectory(), dlg.GetFilename())
#print self.ProjectFile
if self.ProjectFile != '':
print "Made it to here (Save)..."
#self.Register(self) # Also tried calling Register in __init__
self._persistMgr = PM.PersistenceManager.Get()
print self.ProjectFile # Gives correct filename
self._persistMgr.SetPersistenceFile(self.ProjectFile)
self._persistMgr.Save(self)
print "Finished saving."
私はむしろクラスのメンバとして有するよりも、ローカルのPersistenceManagerオブジェクトを使用して試してみたが、これは何の違いを行いません。面白いことに、ウィンドウの__init__
関数内にself.__persistMgr
オブジェクトを宣言し、そこにハードコーディングされたファイル名でSetPersistenceFile
メソッドを使用すると、ファイルが書き込まれますが、これは実行時にユーザーが指定する必要があるため役に立ちません。
誰もファイルが保存されていない理由を知っていますか、どのように修正できますか?
ありがとうございます。この例ではうまく動作しますが、別の関数(私がしようとしているように)に置くと、フレームプロパティをキャプチャするように見えますが、コントロールという名前の子は表示されません。どこに置いても、子コントロールは正しく保存されます。 – PowerSystemsDev
オリジナルの回答への参照を追加しました –