3

次の方法でユーザーにプロンプ​​トを表示する保存ルーチンがあります。

  • 現在選択されているファイル名が存在する場合、上書きのプロンプト
  • 現在選択されているファイル名が空の場合 (例: "")、ユーザーにファイル名の挿入を求めるダイアログを設定します
  • 現在選択されているファイル名が存在しない場合は、保存してください。

私のコードは現在以下のようになっていますが、これを行うにはもっと良い方法があるはずです。現在、ユーザーは「はい、いいえ、キャンセル」という選択肢を持つダイアログでプロンプトが表示されますが、「はい、名前を付けて保存、キャンセル」にしたいと思います。「いいえ」ボタンを、ユーザーが必要なファイル名を挿入できるダイアログを開く「名前を付けて保存」ボタンに変更する方法が本当に見つかりませんでした。これを改善する提案はありますか?

def saveProject(window):

if os.path.exists(window.getGlobalSettings().getCurrentFileName()): #File exists from before   
    dlg = wx.MessageDialog(window,
                "Overwrite existing project file " + window.getGlobalSettings().getCurrentFileName() + "?",
                "Overwrite existing project file",
                wx.SAVE|wx.CANCEL|wx.ICON_QUESTION)

    result = dlg.ShowModal()
    dlg.Destroy()

    if result == wx.ID_YES:
        save(window,currentFileName)
        return True
    elif result == wx.ID_SAVEAS:
        #TODO: do shit here
        return False
    elif result == wx.ID_NO:
        return False
    elif result == wx.ID_CANCEL:
        return False

elif window.getGlobalSettings().getCurrentFileName == "":
    #TODO: do shit here
    return False

else:
    save(window,window.getGlobalSettings().getCurrentFileName())
    return True

アップデート

コードは次のように正常に変更されました。

def saveProject(window):

dlg = wx.FileDialog(window, "Save project as...", os.getcwd(), "", "*.kfxproject", \
                    wx.SAVE|wx.OVERWRITE_PROMPT)
result = dlg.ShowModal()
inFile = dlg.GetPath()
dlg.Destroy()

if result == wx.ID_OK:          #Save button was pressed
    save(window,inFile)
    return True
elif result == wx.ID_CANCEL:    #Either the cancel button was pressed or the window was closed
    return False
4

1 に答える 1

2

間違ったダイアログ タイプを使用しています。代わりにFileDialogを使用します。

  • 「ファイルが上書きされるかどうかを確認するプロンプト」機能が既に含まれていますwx.FD_OVERWRITE_PROMPT
  • これは他の誰もが使用するものであるため、ユーザーはこの種のダイアログを期待し、別のメッセージが表示されたときに混乱します。

ダイアログで「保存」を「名前を付けて保存」に置き換える方法を見つけることができませんでしたが (それには があるだけですwx.FD_SAVE)、ほとんどの人はそれに気づきません。

于 2013-01-25T15:11:32.110 に答える