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.
Ui_DockWidget
2. Definición de la clase Esta clase contiene todo lo necesario para poner en pantalla el DockWidget
(panel flotante) y gestionar la lógica de “analizar” el texto.
setupUi(self, DockWidget)
3. Se encarga de:
-
Configurar el widget principal
- Le pone un nombre, tamaño, y crea un contenedor
dockWidgetContents
.
- Le pone un nombre, tamaño, y crea un contenedor
-
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:- Nombre del archivo
- Texto a escribir
- Número de líneas
-
Displays (
QLCDNumber
) para mostrar:- Número de vocales
- Número de consonantes
-
-
Conectar slots/signals
QtCore.QMetaObject.connectSlotsByName(DockWidget)
retranslateUi(self, DockWidget)
4. Aquí se asignan los textos visibles a cada widget:
self.label.setText(_translate("DockWidget", "Nombre Archivo"))
…
self.analize_button.setText(_translate("DockWidget", "Analizar"))
manage_file(self)
5. Lógica de negocio: Este método es el que se ejecuta al pulsar Analizar:
-
Leer valores ingresados
file_name
: nombre del archivotext
: texto a escribirline_number
: cuántas veces repetir la línea
-
Crear el archivo si no existe
if not os.path.exists(file_name): file = open(file_name, "x")
-
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))
-
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)
-
-
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.