Curso Python. Volumen XIV: Interfaces Gráficas. Parte V

Escrito por Javier Ceballos Fernández

Bienvenidos un día más al curso de Python, hoy vamos a continuar con las interfaces gráficas creadas con Qt. En el capítulo anterior os enseñamos a crear la interfaz gráfica con el “Qt Designer”. En este capítulo os vamos a explicar cómo utilizar esa interfaz dentro de nuestro código Python. Así que vamos a empezar.

Lo primero que tendremos que hacer es guardar la interfaz que diseñamos en el capítulo anterior, con el nombre “conversor.ui” en la carpeta del proyecto Python que vamos a realizar. Una vez lo tengamos guardado, abrimos nuestro Python IDE y empezamos a escribir el código que nos unirá esta interfaz con la aplicación. Creamos un archivo que se llamará “conversor.py”.

Código

Dentro de nuestro de este archivo necesitaremos el siguiente código:

#!/usr/bin/python
import sys
from PyQt4 import QtCore, QtGui, uic

# Cargar nuestro archivo .ui
form_class = uic.loadUiType("conversor.ui")[0]

class MiVentana(QtGui.QMainWindow, form_class):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.CtoF_Button.clicked.connect(self.CtoF_Button_click)
        self.FtoC_Button.clicked.connect(self.FtoC_Button_click)

    # Evento del boton btn_CtoF
    def CtoF_Button_click(self):
        cel = float(self.CBox.text())
        fahr = cel * 9 / 5.0 + 32
        self.FBox.setValue(int(fahr + 0.5))

    # Evento del boton btn_FtoC
    def FtoC_Button_click(self):
        fahr = self.FBox.value()
        cel = ((fahr - 32) * 5) / 9
        self.CBox.setText(str(cel))

app = QtGui.QApplication(sys.argv)
Ventana = MiVentana(None)
Ventana.show()
app.exec_()

Análisis del código

Lo primero que hacemos es importar la biblioteca “PyQt” y cargamos el archivo “conversor.ui” que generamos con “Qt Designer”. A continuación creamos la clase “MiVentana” y le pasamos (QtGui.QMainWindow y form_class). El método “__init__” configura la interfaz “GUI”. En esta función tenemos que conectar los controladores de eventos:

self.CtoF_Button.clicked.connect(self.CtoF_Button_click)
self.FtoC_Button.clicked.connect(self.FtoC_Button_click)

La función “connect()” se usa para conectar eventos. Se toma un único parámetro, que es el nombre de la función. Saber que:

  • “CtoF_Button” es el nombre del botón.
  • El método “clicked.connect()” es llamado cuando el botón es presionado.
  • El nombre de la función de controlador de eventos es  “CtoF_Button_click”.

Ahora tendremos que crear las funciones que coincidirán con el nombre que hemos puesto en el método “connect()”: CtoF_Button_click y FtoC_Button_click. Estas funciones las tendremos que definir más tarde en nuestra clase. Por ejemplo:

# Evento del boton btn_CtoF
def CtoF_Button_click(self):
    cel = float(self.CBox.text())
    fahr = cel * 9 / 5.0 + 32
    self.FBox.setValue(int(fahr + 0.5))

En esta función, la variable “cel” captura el valor de nuestro Widget “(CBox)”. Luego en la variable “fahr” se calcula la conversión a grados Fahrenheit y en la última línea se pasa el resultado a nuestro Widget “(FBox)”. Lo mismo sucede con la función “FtoC_Button_click()”.

Al ejecutar el código se puede observar que el “FBox” tiene un mínimo y un máximo “(0 – 99)”. Esto se ha creado de tal manera que no va a hacer falta poner dos campos de texto, pero esta condición se puede cambiar si nos apetece probar con otro funcionamiento.

Al final del código, necesitaremos iniciar la interfaz gráfica:

app = QtGui.QApplication(sys.argv)
Ventana = MiVentana(None)
Ventana.show()
app.exec_()

Esto es todo por hoy, espero que este método de crear interfaces gráficas os haya resultado más sencillo. Recordar a todos los que se acaban de unirse al curso que tienen un índice del curso, ya que nunca es tarde para empezar.

Continúa leyendo
  • JinLee

    Hola al principio tuve problemas para hacer el ejemplo, pero el problema esta que pyqt5 ya no tiene el modulo qmainwindow y qapplication en qtgui, si no, que ahora esta en qtwidgets. Por lo tanto en el ejemplo seria qtwidgets.qmainwindow.

    saludos.

  • CrestaMan

    Capo, gracias por el curso. Haciendo caso a las correcciones que en esta entrada hizo JinLee, he logrado correr el código sin errores, creando un formulario parecido al tuyo, con los mismos nombres de objeto, y poniéndolo en el proyecto. Pero el problema es que al darle RUN, si bien termina sin errores, nunca me levanta el formulario en pantalla.

  • Rod Charles Jr

    Hola. Gracias por el curso. Tal como en esta entrada JinLee comenta, es que haciendo dichas correcciones es que he podido correr el código sin errores, llamando correctamente al formulario .ui que hice con el designer. El problema es que al darle RUN, si bien corre sin errores, no levanta el formulario en pantalla, y en definitiva no se puede probar la aplicación. Podrías echarme una mano? estoy recién empezando con python y estas herramientas y me parecen muy interesantes.

Últimos análisis

Valoración RZ
6
Valoración RZ
8
Valoración RZ
10
Valoración RZ
10
Valoración RZ
9
Valoración RZ
9
Valoración RZ
10
Valoración RZ
8