Actividad 4: Modulo 4 Interfaces gráficas en Python mediante PYQT5 - FredyCansecoSantos/Reto_Diseno_con_Logica_Programable GitHub Wiki
Objetivo de la actividad
El usuario deberá llenar el espacio dentro del parámetro con el nombre del archivo que se va a crear, después deberá escribir el texto que estará dentro del archivo y el número de veces que se van a escribir el texto indicado en el archivo. Después de llenar los parámetros de la ventana, el usuario podrá dar click en el botón analizar y el programa entregará como resultado el número de vocales y consonantes que contiene el archivo creado. A continuación una representación de lo requerido para la actividad:
Descripción de la primera etapa
Para comenzar con la elaboración de esta actividad se inició por hacer la interfaz gráfica, la cual fue diseñada mediante el software de Qt designer, en la cual se colocaron todos los elementos requeridos de la actividad, entre las cuales se encuentra el apartado de nombre de archivo, el texto deseado a escribir, el número de líneas dentro de nuestro archivo, un botón para analizar el archivo, el cual tiene la función de contar las vocales y consonantes dentro de nuestro archivo, y por últimos dos botones, en los cuales se reflejará la cantidad de vocales y consonantes dentro de nuestro archivo. Posteriormente se guardó el archivo y se convirtió a código python, para luego poder programar las funciones que tendría nuestro programa. A continuación el código de la interfaz gráfica:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_act_4(object):
def setupUi(self, act_4):
act_4.setObjectName("act_4")
act_4.resize(540, 600)
self.centralwidget = QtWidgets.QWidget(act_4)
self.centralwidget.setObjectName("centralwidget")
self.analizar = QtWidgets.QPushButton(self.centralwidget)
self.analizar.setGeometry(QtCore.QRect(200, 330, 93, 28))
self.analizar.setObjectName("analizar")
self.name = QtWidgets.QLabel(self.centralwidget)
self.name.setGeometry(QtCore.QRect(290, 110, 150, 16)) #(290, 110, 121, 16))
self.name.setObjectName("name")
self.texto = QtWidgets.QLabel(self.centralwidget)
self.texto.setGeometry(QtCore.QRect(290, 180, 110, 16)) # (290, 180, 91, 16))
self.texto.setObjectName("texto")
self.line = QtWidgets.QLabel(self.centralwidget)
self.line.setGeometry(QtCore.QRect(290, 250, 200, 16)) # (290, 250, 171, 16))
self.line.setObjectName("line")
self.t_name = QtWidgets.QLineEdit(self.centralwidget)
self.t_name.setGeometry(QtCore.QRect(100, 110, 113, 22)) # (100, 110, 113, 22))
self.t_name.setObjectName("t_name")
self.t_texto = QtWidgets.QLineEdit(self.centralwidget)
self.t_texto.setGeometry(QtCore.QRect(100, 180, 113, 22)) # (100, 180, 113, 22))
self.t_texto.setObjectName("t_texto")
self.t_line = QtWidgets.QLineEdit(self.centralwidget)
self.t_line.setGeometry(QtCore.QRect(100, 250, 113, 22)) # (100, 250, 113, 22))
self.t_line.setObjectName("t_line")
self.t_nvocales = QtWidgets.QLineEdit(self.centralwidget)
self.t_nvocales.setGeometry(QtCore.QRect(70, 450, 113, 22)) #(70, 450, 113, 22))
self.t_nvocales.setObjectName("t_nvocales")
self.t_nconsonantes = QtWidgets.QLineEdit(self.centralwidget)
self.t_nconsonantes.setGeometry(QtCore.QRect(310, 450, 113, 22))
self.t_nconsonantes.setObjectName("t_nconsonantes")
self.nvocales = QtWidgets.QLabel(self.centralwidget)
self.nvocales.setGeometry(QtCore.QRect(70, 410, 150, 16))
self.nvocales.setObjectName("nvocales")
self.nconsonantes = QtWidgets.QLabel(self.centralwidget)
self.nconsonantes.setGeometry(QtCore.QRect(290, 410, 180, 20))
self.nconsonantes.setObjectName("nconsonantes")
act_4.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(act_4)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
self.menubar.setObjectName("menubar")
act_4.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(act_4)
self.statusbar.setObjectName("statusbar")
act_4.setStatusBar(self.statusbar)
self.retranslateUi(act_4)
QtCore.QMetaObject.connectSlotsByName(act_4)
def retranslateUi(self, act_4):
_translate = QtCore.QCoreApplication.translate
act_4.setWindowTitle(_translate("act_4", "MainWindow"))
self.analizar.setText(_translate("act_4", "Analizar"))
self.name.setText(_translate("act_4", "Nombre del archivo"))
self.texto.setText(_translate("act_4", "Texto a escribir"))
self.line.setText(_translate("act_4", "Número de líneas en archivo"))
self.nvocales.setText(_translate("act_4", "Número de vocales"))
self.nconsonantes.setText(_translate("act_4", "Número de consonantes"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
act_4 = QtWidgets.QMainWindow()
ui = Ui_act_4()
ui.setupUi(act_4)
act_4.show()
sys.exit(app.exec_())
Descripción del código donde se implementan las funciones
Continuando con la elaboración de código encontramos primeramente la importación del archivo de la interfaz gráfica, la cual es importante pues sin esta no podremos hacer que funcione. Luego de esto se crean dos funciones, en la primera denominada como "Create_file" como su nombre lo indica tiene la función de generar nuestro archivo con el nombre y contenido deseados, el número de lineas deseadas. La segunda función llamada "Analyze" está hecha específicamente para analizar el número de vocales y consonantes que nuestro archivo tiene, dicha función contienen un arreglo de caracteres para identificar cuales son catalogadas como vocales y cuales son consideradas como consonantes, posterior a esto se lee el archivo creado por la función anterior y mediante un ciclo for recorremos el archivo para identificar a las consonantes y vocales, las cuales se contabilizan y se muestran en nuestra interfaz gráfica. A continuación el código:
from act_4 import *
class Ui_act_4(QtWidgets.QMainWindow,Ui_act_4):
def __init__(self, *args, **kwargs):
QtWidgets.QMainWindow.__init__(self, *args, **kwargs)
self.setupUi(self)
self.analizar.clicked.connect(self.Create_file)
self.analizar.clicked.connect(self.Analyze)
def Create_file(self):
line="\n"
texto = self.t_texto.text() + line
f=open(self.t_name.text(), 'w')
for i in range(int(self.t_line.text())):
x = texto
f.write(x)
f.close()
def Analyze(self):
fileHandle = open(self.t_name.text(), "r")
tot = 0
cant=0
vocales = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']
consonantes =[ 'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y','Z', 'b','c', 'd', 'f', 'g' ,'h' ,'j' ,'k' ,'l' ,'m' ,'n' ,'ñ','p' ,'q' ,'r' ,'s' ,'t' ,'v' ,'w' ,'x' ,'y' ,'z' ]
for char in fileHandle.read():
if char in vocales:
tot = tot+1
elif char in consonantes:
cant=cant+1
fileHandle.close()
self.t_nvocales.setText(str(tot))
self.t_nconsonantes.setText(str(cant))
if __name__ == "__main__":
app = QtWidgets.QApplication([])
window = Ui_act_4()
window.show()
app.exec_()
Capturas de pantalla de la ejecución
A continuación se muestran las capturas de pantalla que muestran la ejecución del programa, en donde podemos observar que la ejecución del programa fue hecha correctamente, esto se demuestra porque indicamos que el nombre de nuestro archivo es "yo,txt", luego de esto indicamos la escritura de la palabra "hola" en dos lineas de texto, a lo que nuestro programa devuelve el número de vocales y consonantes correcto, pues tenemos 4 vocales y 4 consonantes dentro de nuestro archivo creado.
Además podemos confirmar que el archivo fue creado debidamente, se adjunta la captura de la ubicación del archivo: