En esta segunda parte se utilizará el IDE QT Creator para agilizar la creación de las interfaces de usuario.

Creación de una calculadora con las operaciones básicas

Lo primero es ejecutar el Qt Creator ya sea en la línea de comando, desde el menú o desde donde se deje!

Se inicia un nuevo proyecto «Qt C++ Proyect» y luego se selecciona «Qt Gui Aplicattion»

Se continua siguiendo el asistente para crear el proyecto, se iniciará con un MainWindow vacío que es necesario llenar con los objetos que muestra a continuación:

Se necesita modificar los textos de cada componente y el nombre de cada uno de los componentes para poder hacer referencia a ellos desde python.

Y ahora si la hora de la verdad ¿cómo se va a usar este diseño desde python? y es importante mencionar que el Qt Creator no cuenta con alguna opción para crear el código python necesario.

Para poder usar el diseño creado por Qt Creator, se busca el archivo mainwindow.ui dentro de la carpeta del proyecto y se convierte a python como se muestra

$ pyuic4 mainwindow.ui -o mainwindow.py

El archivo mainwindow.py contiene todo el código necesario para mostrar todo el diseño creado con Qt Creator. A continuación se observa un segmento del código

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'mainwindow.ui'
#
# Created by: PyQt4 UI code generator 4.8.2
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(400, 300)
        self.centralWidget = QtGui.QWidget(MainWindow)
        self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
        self.label1 = QtGui.QLabel(self.centralWidget)
        self.label1.setGeometry(QtCore.QRect(20, 20, 60, 16))
        self.label1.setObjectName(_fromUtf8("label1"))
...

Para poder hacer uso de la clase Ui_MainWindow contenida en e archivo mainwindow.py, se crea el archivo calculadora.py y lo primero es importar la mencionada clase

from mainwindow import Ui_MainWindow

ahora se crea la clase Principal que será la encargada de usar la clase UI_MainWindow

# Se hereda de la clase QtGui.QMainWindow
class Principal(QtGui.QMainWindow):
    # Se define el constructor de la clase __init__
    def __init__(self):
        # Se llama al constructor de la clase padre
        QtGui.QMainWindow.__init__(self)

        # Se crea la instancia de Ui_MainWindow
        self.ventana = Ui_MainWindow()
        self.ventana.setupUi(self)

        # Se conectan las señales con los slots
        self.connect(self.ventana.bSalir, QtCore.SIGNAL('clicked()'), QtCore.SLOT('close()'))
        self.connect(self.ventana.bSumar,QtCore.SIGNAL('clicked()'), self.sumar)
        self.connect(self.ventana.bRestar,QtCore.SIGNAL('clicked()'), self.restar)
        self.connect(self.ventana.bMultiplicar,QtCore.SIGNAL('clicked()'), self.multiplicar)
        self.connect(self.ventana.bDividir,QtCore.SIGNAL('clicked()'), self.dividir)

se observa como en el constructor se conectan todas las señales con los slots correspondientes.

 

Se crea el código de cada uno de los slots

    def sumar(self):
        self.ventana.edit3.setText(str(float(self.ventana.edit1.text()) + float(self.ventana.edit2.text())))

    def restar(self):
        self.ventana.edit3.setText(str(float(self.ventana.edit1.text()) - float(self.ventana.edit2.text())))
...

Y el resultado obtenido es como el siguiente:

El resultado obtenido es impresionante y todo lo he realizado en unos 45min, pero vaya que ya conociendo la herramienta y el lenguaje, esto lo habría hecho en unos 15 min o menos 😉

Estaba pensando como colocar un Fin Pythonesco, pero resulta que en Python no existe una instrucción de Fin, así que