Metodología - Majocroche/PyQT_Reporte GitHub Wiki

Diseño de interfaz gráfica

Objetivo: Crear una interfaz gráfica que permite una interacción entre el usuario y el programa.


  • Entradas:

    • Nombre del archivo.
    • Texto a escribir en el archivo creado.
    • Número de veces que el usuario quiere que se repita.
  • Salidas:

    • Número de vocales que tiene el texto.
    • Número de consonantes que tiene el texto.
    • Archivo .txt con el nombre que da el usuario.
  • Condiciones de operación:

    • El programa distingue letras vocales o consonantes sin importar si son mayúsculas y/o minúsculas.

Código

1. Importaciones

import os
from PyQt5 import QtCore, QtGui, QtWidgets
  • os: para manejar operaciones con archivos (comprobar existencia, crear).
  • PyQt5: librería para crear interfaces gráficas en Python.

2. Definición de la clase Ui_DockWidget

Esta clase contiene todo lo necesario para poner en pantalla el DockWidget (panel flotante) y gestionar la lógica de “analizar” el texto.


3. setupUi(self, DockWidget)

Se encarga de:

  1. Configurar el widget principal

    • Le pone un nombre, tamaño, y crea un contenedor dockWidgetContents.
  2. Añadir y posicionar los elementos visuales

    • Labels: hay 5 etiquetas (QLabel) que muestran textos como “Nombre Archivo”, “Texto a escribir”, etc.

      • Ejemplo:

        self.label = QtWidgets.QLabel(self.dockWidgetContents)
        self.label.setGeometry(QtCore.QRect(320, 40, 101, 16))
        self.label.setObjectName("label")
        
      • Las otras 4 labels se crean de forma similar, con distintos nombres y posiciones.

    • Botón:

      self.analize_button = QtWidgets.QPushButton(self.dockWidgetContents)
      self.analize_button.setGeometry(QtCore.QRect(210, 210, 113, 32))
      self.analize_button.setObjectName("analize_button")
      self.analize_button.clicked.connect(self.manage_file)
      

      Al hacer clic, llama a manage_file().

    • Campos de texto (QLineEdit) para ingresar:

      1. Nombre del archivo
      2. Texto a escribir
      3. Número de líneas
    • Displays (QLCDNumber) para mostrar:

      1. Número de vocales
      2. Número de consonantes
  3. Conectar slots/signals

    QtCore.QMetaObject.connectSlotsByName(DockWidget)
    

4. retranslateUi(self, DockWidget)

Aquí se asignan los textos visibles a cada widget:

self.label.setText(_translate("DockWidget", "Nombre Archivo"))
…
self.analize_button.setText(_translate("DockWidget", "Analizar"))

5. Lógica de negocio: manage_file(self)

Este método es el que se ejecuta al pulsar Analizar:

  1. Leer valores ingresados

    • file_name: nombre del archivo
    • text: texto a escribir
    • line_number: cuántas veces repetir la línea
  2. Crear el archivo si no existe

    if not os.path.exists(file_name):
        file = open(file_name, "x")
    
  3. Escribir en el archivo Repite la cadena text seguida de salto de línea el número de veces indicado:

    with open(file_name, "w") as f:
        f.write(f"{text}\n" * int(line_number))
    
  4. Contar vocales

    • Define un conjunto de vocales (mayúsculas y minúsculas).

    • Suma cuántas aparecen en el texto:

      vowels = {'a','e','i','o','u','A','E','I','O','U'}
      vowels_number = sum(text.count(v) for v in set(text) & vowels)
      self.vowels_number_out.display(vowels_number)
      
  5. Contar consonantes

    • Quita espacios y calcula la longitud restante menos las vocales:

      text_sin_espacios = text.replace(" ", "")
      consonants = len(text_sin_espacios) - vowels_number
      self.consonant_number_out.display(consonants)
      

6. Ejecución directa

En la sección final:

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    DockWidget = QtWidgets.QDockWidget()
    ui = Ui_DockWidget()
    ui.setupUi(DockWidget)
    DockWidget.show()
    sys.exit(app.exec_())
  • Se crea la aplicación Qt, se instancia el widget, se configura y se muestra.
  • app.exec_() inicia el bucle de eventos de la interfaz.