es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo utilizar la función “Abrir con” con Python?

Actualmente estoy trabajando con un script de Python que tiene el siguiente código. Abre un archivo que contiene texto JSON y determina un valor a partir de eso.

browseFiles()

def browseFiles():
    global fileName
    fileName = filedialog.askopenfilename(title = "Seleccionar un archivo", filetypes = (("Todos los archivos", "*.*"),))

# Abrir el archivo en modo lectura
fileFile = open(fileName, "r")

# Leer el archivo
fileContent = fileFile.read()

# Renderizar el JSON
fileJSON = json.loads(fileContent)

# Determinar el ID
myID = fileJSON["key"]

# Actualizar el estado
windowRoot.title(myID)

... código restante

fileFile.close()

Sin embargo, es menos conveniente abrir el programa cada vez y luego navegar hasta él.

Windows tiene una función de “Abrir con” en el Explorador de archivos donde podemos hacer clic derecho en un archivo y abrirlo con aplicaciones como Word, etc.

¿Cómo implementar esto en un script de Python? ¿Debería considerar crear un archivo .exe de este script primero y, de ser así, qué biblioteca sería la más adecuada para esto? (Considerando que es una utilidad muy pequeña y simple)

Alguna información adicional que probablemente no sea necesaria: Estoy usando Tkinter para la interfaz gráfica de usuario.

(Por cierto, si esta pregunta ya existe en StackOverflow o cualquier otro sitio web, por favor comenta el enlace en lugar de simplemente marcarlo como duplicado. Intenté buscar mucho y no pude encontrar nada)

Saludos,
Vivaan.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para implementar la función “Abrir con” en un script de Python, puedes aprovechar el Registro de Windows para agregar un nuevo elemento en el menú contextual del tipo de archivo deseado. Una vez que el usuario selecciona ese elemento del menú, tu script de Python se lanzará con el archivo seleccionado como argumento.

    Aquí están los pasos generales a seguir:

    1. Crea una nueva clave de registro bajo HKEY_CLASSES_ROOT con la extensión de archivo de interés (por ejemplo, .json).
    2. Modifica la subclave “shell” para agregar una nueva subclave para tu acción personalizada (por ejemplo, “Abrir con Mi Utilidad”).

    3. Modifica la subclave “command” en tu acción personalizada para incluir la ruta completa de tu script de Python seguido de “%1” (para indicar la ruta del archivo seleccionado).

    Aquí tienes un ejemplo de código:

    import winreg
    
    def register_file_type():
        # Crea una nueva clave para archivos .json
        key = winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, '.json')
        winreg.SetValue(key, None, winreg.REG_SZ, 'Json.File')
    
        # Crea una nueva clave para nuestra acción personalizada
        key = winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, 'Json.File\\shell\\Open with My Utility')
        winreg.SetValue(key, None, winreg.REG_SZ, 'Abrir con Mi Utilidad')
    
        # Configura el comando para lanzar nuestro script de Python con el archivo seleccionado como argumento
        key = winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, 'Json.File\\shell\\Open with My Utility\\command')
        winreg.SetValue(key, None, winreg.REG_SZ, 'C:\\ruta\\hacia\\python.exe "C:\\ruta\\hacia\\utility.py" "%1"')
    

    Ten en cuenta que debes sustituir las rutas correctas para Python y tu script de utilidad en el ejemplo anterior.

    En cuanto a la creación de un ejecutable para tu script, puedes utilizar herramientas como PyInstaller o cx_Freeze para empaquetar tu script como un ejecutable independiente. Una vez que lo hayas hecho, puedes apuntar el comando del registro anterior a la ruta de tu archivo ejecutable en lugar del intérprete de Python.

    ¡Buena suerte!

Comments are closed.