Manipulación de la interfaz gráfica de usuario en Windows con Win32GUI en Python

Manipulación de la interfaz gráfica de usuario en Windows con Win32GUI en Python

Introducción

Win32GUI es una biblioteca de Python que permite crear aplicaciones gráficas de usuario (GUI) para Windows. Es una biblioteca simple y fácil de usar, ideal para principiantes.

Instalación

Para instalar Win32GUI, abre una terminal y ejecuta el siguiente comando:

pip install pywin32

Creación de una ventana

Para crear una ventana, usamos la función CreateWindow(). Esta función tiene varios parámetros, pero los más importantes son:

  • lpClassName: El nombre de la clase de la ventana.
  • lpWindowName: El título de la ventana.
  • dwStyle: El estilo de la ventana.
  • x: La posición x de la ventana.
  • y: La posición y de la ventana.
  • nWidth: El ancho de la ventana.
  • nHeight: El alto de la ventana.

Por ejemplo, el siguiente código crea una ventana con el título «Mi ventana»:

Python
import win32gui

# Creamos la ventana
hwnd = win32gui.CreateWindow(
    "MyWindowClass",
    "Mi ventana",
    WS_OVERLAPPEDWINDOW,
    0,
    0,
    640,
    480,
    None,
    None,
    None,
    None
)

# Mostramos la ventana
win32gui.ShowWindow(hwnd, SW_SHOWNORMAL)

# Esperamos a que se cierre la ventana
win32gui.PumpMessages()

Añadir controles a la ventana

Una vez que hemos creado una ventana, podemos añadirle controles. Los controles más comunes son botones, etiquetas, cuadros de texto, listas, etc.

Para añadir un control a una ventana, usamos la función CreateWindowEx(). Esta función tiene varios parámetros, pero los más importantes son:

  • lpClassName: El nombre de la clase del control.
  • lpWindowName: El título del control.
  • dwStyle: El estilo del control.
  • x: La posición x del control.
  • y: La posición y del control.
  • nWidth: El ancho del control.
  • nHeight: El alto del control.
  • hWndParent: El identificador de la ventana padre del control.

Por ejemplo, el siguiente código añade un botón a la ventana que hemos creado anteriormente:

Python
import win32gui

# Creamos el botón
hwndButton = win32gui.CreateWindowEx(
    0,
    "Button",
    "Mi botón",
    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
    10,
    10,
    100,
    50,
    hwnd,
    None,
    None,
    None
)

# Asociamos un evento al botón
win32gui.SetWindowLong(hwndButton, GWL_WNDPROC, ButtonProc)

# Mostramos la ventana
win32gui.ShowWindow(hwnd, SW_SHOWNORMAL)

# Esperamos a que se cierre la ventana
win32gui.PumpMessages()

Eventos

Los controles pueden generar eventos, como clics, cambios de texto, etc. Para capturar estos eventos, podemos asociar una función al control.

La función que asociamos al control debe tener el siguiente prototipo:

Python
def EventHandler(hwnd, message, wParam, lParam):
    # Procesamos el evento

    return 0

Por ejemplo, el siguiente código asocia un evento al botón que hemos creado anteriormente:

Python
def ButtonProc(hwnd, message, wParam, lParam):
    if message == WM_COMMAND and wParam == IDOK:
        # El botón ha sido pulsado
        print("El botón ha sido pulsado")
    return 0

Conclusión

Win32GUI es una biblioteca sencilla y fácil de usar para crear aplicaciones gráficas de usuario en Windows. Con esta biblioteca, podemos crear ventanas, añadir controles y capturar eventos.