Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Input con valor definido y editable
#1
Hola, estoy haciendo una pequeña aplicación de consola (cmd) en una PC con Windows y debo usar algunos INPUT. Quisiera que me apareciera un valor por defecto y que este sea editable. Por ejemplo:

Nombre de la carpeta: descargas


Y "descargas" pueda ser modificado al vuelo.


Usando un Input normal esto no es posible.

La idea que tengo es la de memorizar las opciones que he elegido en un file de configuración y que después estas me aparezcan.

Yo uso Python 3.6. En Internet he encontrado una persona que pregunta lo mismo pero la soluciones que proponen no funcionan en Windows y con Python 3.
Este es el link:

https://stackoverflow.com/questions/2533...t-possible

¿Pueden ayudarme?
Gracias.
Responder
#2
Hola Gabriel, bienvenido.

Basándome en el código que aparece en ese enlace, con unos pequeños cambios lo hacemos funcionar en Python 3:

Código:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import win32console


_stdin = win32console.GetStdHandle(win32console.STD_INPUT_HANDLE)


def input_def(prompt, default=''):
    keys = []
    for c in default:
        evt = win32console.PyINPUT_RECORDType(win32console.KEY_EVENT)
        evt.Char = c
        evt.RepeatCount = 1
        evt.KeyDown = True
        keys.append(evt)

    _stdin.WriteConsoleInput(keys)
    return input(prompt)


if __name__ == '__main__':
    name = input_def("Nombre de la carpeta: ", default="descargas")
    print(name)

El único requisito es instalar el paquete pywin32 vía:

Código:
pip install pywin32

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
Hola Francisco, he copiado el código y funciona perfectamente.
Te estoy muy agradecido per haberme ayudado.

Yo siempre he trabajado con ambientes visuales y me cuesta acostumbrarme a la línea de comando (no se si se dice así en español). Soy una persona curiosa y me gustaría saber como funciona el código.

Tengo un blog gratuito de electrónica para principiantes y me he permitido últimamente de publicar algún proyecto con Python, no obstante mi poca experiencia, para controlar dispositivos externos. Si mis publicaciones o mis conocimientos de electrónica pueden llegar a ser útiles en este foro estoy a disposición.

Este es el link del blog:

https://www.inventable.eu/indice-de-articulos/

Y este es uno de los artículos que he publicado de Python

https://www.inventable.eu/2018/04/08/controlemos-reles-con-telefono/

Hasta pronto.
Gabriel
Responder
#4
Gabriel, te felicito por tu blog, muy interesante y veo que tiene buena repercusión.

En cuanto al código, está basado principalmente en la API de Windows: un conjunto de funciones y estructuras diseñadas en C provistas por el sistema operativo. pywin32 es un paquete que permite el acceso a estas funciones directamente desde Python, sin la necesidad de hacer las conversiones de tipos de dato entre lenguajes.

La función en sí hace uso de la función de la API GetStdHandle(), que obtiene un puntero a la consola, y luego escribe uno por uno los caracteres del argumento default vía WriteConsoleInput(). La documentación de la API de Windows es realmente muy buena; te invito a que chequees los enlaces de ambas funciones.

Saludos!
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)