Implementar “Guardar como” en el cuadro de diálogo de guardar wxpython

Tengo una rutina de guardado que debería avisar al usuario de la siguiente manera:

  • Si el nombre de archivo seleccionado actualmente existe, solicite sobrescribir
  • Si el nombre del archivo seleccionado actualmente está vacío (es decir, “”), configure un cuadro de diálogo para pedirle al usuario que inserte el nombre del archivo
  • Si el nombre del archivo seleccionado actualmente no existe, ¡guárdelo!

Actualmente mi código es como el siguiente, pero creo que debería haber una mejor manera de hacerlo. Tal como está ahora, se le muestra al usuario un diálogo con las opciones “Sí, No, Cancelar”, pero me gustaría que fuera “Sí, Guardar como, Cancelar”. Realmente no pude encontrar ninguna manera de cambiar el botón “No” a un botón “Guardar como” que abre un cuadro de diálogo donde el usuario puede insertar el nombre del archivo deseado. ¿Alguna sugerencia de mejorar esto?

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 

ACTUALIZAR

El código fue cambiado exitosamente a:

 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 

Estás utilizando el tipo de diálogo incorrecto. Utilice FileDialog en su lugar:

  • Ya incluye la característica “solicitar confirmación si se sobrescribe un archivo” con wx.FD_OVERWRITE_PROMPT
  • Eso es lo que usan todos los demás para que los usuarios esperen este tipo de diálogo y se confundan cuando obtienen algo más.

No pude encontrar una manera de reemplazar “Guardar” con “Guardar como” en el cuadro de diálogo (solo tiene wx.FD_SAVE ) pero la mayoría de las personas no lo notarán.