Tengo una rutina de guardado que debería avisar al usuario de la siguiente manera:
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:
wx.FD_OVERWRITE_PROMPT
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.