Primera aplicacion con Qt Designer y Python

Conversor de temperaturas
Conversor de temperaturas

La idea de esta entrada es crear una sencilla aplicación gráfica utilizando el binding PyQt de la biblioteca gráfica Qt. En caso de no tener instalado PyQt, les dejo el enlace de la entrada que hice ya algún tiempo, explicando su instalación: www.pythondiario.com/2013/11/como-instalar-pyqt4-en-windows-linux-y.html

Una ves que ya esté todo instalado, entramos a Qt Designer (plataforma diseñada para crear aplicaciones gráficas). Esta herramienta de desarrollo GUI nos va a facilitar la tarea de construir ventanas arrastrando botones, cuadros de textos, etiquetas, como también cambiar los tamaños, ubicación de los widgets y propiedades de los mismos.

Qt Designer
Qt Designer

Nuestra sencilla aplicación gráfica será un conversor de temperatura (de Fahrenheit a Celsius y viceversa) 

Desarrollo de la aplicación:

Al abrir Qt Designer visualizamos un cuadro de diálogo para crear un nuevo formulario. En nuestro caso elegimos Main Window porque la nuestra será una aplicación completa. Luego apretamos Create.

Main Window
Main Window

Esto nos va a llevar a nuestra ventana, que en este momento está vacía, pero en breve tendrá los elementos necesarios de nuestra aplicación.
A la izquierda de Qt Designer encontramos el Widget Box, donde figuran todos los widgets que podemos arrastrar a nuestra ventana. Lo primero que haremos será arrastrar dos botones (puedes poner en el buscador de Widget Box : Push Button), también pondremos un par de etiquetas (puedes buscar las etiquetas poniendo label), agregamos también una linea de texto (Line Edit) y por último un cuadro de números (Spin Box).

Tratemos de darle la siguiente forma:

Ventana con widget
Ventana con widget

Para cambiar los nombres que se ven en los botones y las etiquetas hacemos doble clic sobre ellos y podremos editarlos.
Una ves que los widgets estén en nuestra ventana, podremos cambiarlos de tamaño (arrastrar de un borde o esquina) o de ubicación (arrastrándolos). Cada ves que seleccionemos un widget, podremos ver sus propiedades en el Editor de propiedades que se encuentra a la derecha (Property Editor). La primera propiedad que encontramos es el nombre (objectName), que se utiliza para referirse al objeto en el código. Se acostumbra cambiar estos nombres para que sean más significativos y nosotros los cambiaremos de la siguiente forma: el botón de arriba será (btn_CtoF), el de abajo (btn_FtoC), el cuadro de números de la derecha (spinFhar) y la linea de texto de la izquierda (editCel). No necesitamos cambiar el nombre de las etiquetas porque en el código no vamos a interactuar con ellas.

Guardamos nuestro proyecto con el nombre tempconv.ui en una carpeta que puede ser llamada (Conversor de temperatura).
Lo que sigue es hacer funcionar nuestros widgets, para eso creamos un archivo llamado tempconv.py en la misma carpeta que tempconv.ui (en nuestro caso la carpeta se llama Conversor de Temperatura). Dentro de nuestro archivo tempconv.py irá el siguiente código (podemos crearlo con nuestro IDE preferido, en mi caso SublimeText) que explicaré más abajo:

Código:

#!/usr/bin/python
# -*- coding: utf-8 -*-

# Convierte temperaturas
# www.pythondiario.com

import sys
from PyQt4 import QtCore, QtGui, uic

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

class MyWindowClass(QtGui.QMainWindow, form_class):
 def __init__(self, parent=None):
  QtGui.QMainWindow.__init__(self, parent)
  self.setupUi(self)
  self.btn_CtoF.clicked.connect(self.btn_CtoF_clicked)
  self.btn_FtoC.clicked.connect(self.btn_FtoC_clicked)


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

 # Evento del boton btn_FtoC
 def btn_FtoC_clicked(self):
  fahr = self.spinFahr.value()
  cel = ((fahr - 32) * 5) / 9
  self.editCel.setText(str(cel))

app = QtGui.QApplication(sys.argv)
MyWindow = MyWindowClass(None)
MyWindow.show()
app.exec_()

Análisis del código:

En la parte superior importamos la biblioteca PyQt y cargamos el archivo tempconv.ui que generamos con Qt Designer.

Creamos la clase MyWindowClass 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.btn_CtoF.clicked.connect(self.btn_CtoF_clicked)
self.btn_FtoC.clicked.connect(self.btn_FtoC_clicked)

La función connect() se usa para conectar eventos. Se toma un único parámetro, que es el nombre de la función. Notar que:
- btn_CtoF 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 btn_CtoF_clicked.

Ahora resta crear las funciones que coincidirán con el nombre que hemos puesto en el método connect() btn_CtoF_clicked y btn_FtoC_clicked. Las funciones serán definidas en nuestra clase.

Ejemplo:

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

En esta función, la variable cel captura el valor de nuestro Widget (editCel). Luego en la variable fahr se calcula la conversión a grados Fahrenheit y en la última linea se pasa el resultado a nuestro Widget (spinFahr). Lo mismo sucede con la función btn_FtoC_clicked().

Al ejecutar el código se podrán dar cuenta que el spinBox tiene un mínimo y un máximo (0 - 99). Se utilizó para no poner dos campos de texto, pero puedes cambiarlo si gustas experimentar.

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

app = QtGui.QApplication(sys.argv)
MyWindow = MyWindowClass(None)
MyWindow.show()
app.exec_()

---------------------------------------------------------------------------------------------------------------------------------

También puedes ver la entrada que hice sobre aplicaciones gráficas con Tkinter.

Esta fue una demostración de como crear una aplicación gráfica utilizando PyQt, Qt Designer y un poco de código Python.

Saludos y cualquier comentario es Bienvenido.

  1. Unknown dice:

    Saludos, muchas gracias por compartir tus conocimientos es de muchisima ayuda. yo ando actualmente trabajando con wxPython para mis GIU , tengo un largo camino que recorrer aun soy nuevo en esto. y ver este post me provoco ensuciarme las manos con Qt.Hasta la proxima.

    1. PythonDiario dice:

      Gracias a ti Eliomar por pasarte por el blog y participar. Seguiré subiendo mis investigaciones diseñadas en QtDesigner y Qt. Saludos

    2. andfriendsfinance dice:

      Estimado Diego,

      En primer lugar felicitarte por tu fantástico blog.

      Por otra parte, he seguido las indicaciones del artículo y al crear el archivo .py en sublime text 2 lanzándolo desde Tools/Build, en la consola, me sale el siguiente error:

      Traceback (most recent call last):
      File "C:Python27Libsite-packagesPyQt4tempconv.py", line 34, in
      MyWindow = MyWindowClass(None)
      File "C:Python27Libsite-packagesPyQt4tempconv.py", line 18, in __init__
      self.btn_FtoC.clicked.connect(self.btn_FtoC_clicked)
      AttributeError: 'MyWindowClass' object has no attribute 'btn_FtoC'
      [Finished in 4.0s with exit code 1]

      Te agradecería mucho me indicases que estoy haciendo mal.

      Un saludo,

      Enrique Abadin

    3. PythonDiario dice:

      Hola andfriendsfinance, como estas? Gracias por tu comentario, es lo que nos impulsa a seguir escribiendo ;).
      Seguiste el Tutorial al pie de la letra? Creaste en el QtDesigner el form con los botones tal cual el del Tuto? Porque lo que no te está reconociendo ahí es el nombre del botón "btn_FtoC". Intenta cambiar en las propiedades del archivo .ui que creaste en QtDesigner el nombre del botón "De fharenheit a Celcius" por "btn_FtoC". Luego me cuentas, Saludos

    4. andfriendsfinance dice:

      Estimado Diego,

      Muchísimas gracias, efectivamente el error lo tenía en donde indicabas. Ahora lanzo bien la aplicación y todo funciona a la perfección. Un saludo

    5. PythonDiario dice:

      Excelente, me alegra ya puedas implementar la aplicación. Estamos en contacto por aquí. Saludos

  2. Jose dice:

    Excelente Diego, muy fácil de entender. Quise hacer siempre algo en QT pero los tutoriales en castellano son pésimos.
    Lo hice y funcionó, después voy a probar sacandole el spin y poner otro cuadro de texto.

    Abrazo

    1. PythonDiario dice:

      Gracias Jose por participar en el blog. En este momento estoy creando una entrada con ejercicios gráficos para practicar e investigar. Saludos

  3. Anónimo dice:

    Muy facil de entender, gracias por publicar tus trabajos. soy nuevo en python y ver esto me entusiasmo bastante a seguir estudiando. me interesaria saber de Biopython entre otras cosas.Muchas gracias y estare pendiente de tus publicaciones

    1. PythonDiario dice:

      Hola, me alegro mucho te guste y te ayude lo que escribo. Gracias a ti también por pasar y participar en el blog. Saludos

  4. Anónimo dice:

    Hola, Gracias a Python Diario por los Buenos tutoriales y por su puetso a su colectivo.
    Me gustaria ver un ejemplo de varias ventanas incluyendo la principal con su menu elaboradas en Qt Designer y enlasandolas desde python, o sea cuando doy click en en Acerca de que abra la ventana elabarada anteriormente en Qt.
    Gracias

    1. PythonDiario dice:

      Hola, ya van a venir más tutoriales sobre aplicaciones gráficas. El colectivo de Python Diario es la gente que visita y participa como lo has hecho tú. Gracias por pasarte.

  5. KYKEX dice:

    Este comentario ha sido eliminado por el autor.

    1. PythonDiario dice:

      Hola KYKEX, gracias por visitar el blog. Y me alegra mucho te sean de ayuda los tutoriales. Saludos y Feliz año para ti tabmién 😉

    2. KYKEX dice:

      Este comentario ha sido eliminado por el autor.

  6. KYKEX dice:

    Este comentario ha sido eliminado por el autor.

    1. PythonDiario dice:

      Hola KYKEX, necesitaría saber cual es el error que te da, así puedo ver que es lo que está mal . Saludos

    2. KYKEX dice:

      Este comentario ha sido eliminado por el autor.

    3. Unknown dice:

      Hola Diego antes que nada muchas gracias por el blog!! esta muy bueno!! Estoy empezando con la programacion recien y todo esta muy bien explicado hasta para un novato total como yo, gracias!!
      Volviendo al tema yo tengo el mismo problema que KYKEX... cuando intento convertir una unidad (aprieto el boton) no pasa nada en la ventana y en la consola me da este error: Traceback (most recent call last):
      File "tempconv.py", line 22, in btn_CtoF_clicked
      self.spinFahr.setValue(int(fahr + 0.5))
      AttributeError: 'MyWindowClass' object has no attribute 'spinFahr'

      Desde ya muchas gracias!!

    4. PythonDiario dice:

      Hola Martin, gracias por visitar el blog :). ¿Cuando hiciste el diseño de la aplicación en Designer, que nombre le pusiste a el cuadro de números de Fahrenheit? Tendría que tener el nombre: spinFhar, o el que tu quieras, pero luego tienes que cambiarlo en el codigo. Si este es el error, lo mismo te puede pasar con el otro cuadro de números. Fijate eso y despues me cuentas. Saludos

    5. Anónimo dice:

      Diego: Gracias por tu página. Creo que el problema se debe a pequeño error ortografico: Tanto en tu respuesta anterior como en el texto de la sección "Desarrollo de la aplicación", mencionas que el cuadro de números debe tener el nombre "spinFhar" mientras que en el código usas "spinFahr" (se interecambian la a y la h).

      A mi me pasó que al estar usando el Designer copié las etiquetas desde tu explicación y luego tuve los mismos problemas señalados... hasta que me puse a revisar letra por letra!

      Felicidades por tu blog!
      Gerardo Moreno

    6. PythonDiario dice:

      Hola, muchas gracias por tu aporte y tu visita en el blog. Me imagino debe ser ese el error. Me imagino que el colega ya debe haber podido resolverlo. Gracias de nuevo. Saludos

  7. Unknown dice:

    Ante todo felicitarte por este excelente tutorial. El error que comenta el compañero Martin Ochoa. Podría ser debido a que también se debe renombrar el ObjectName en el MainWindow y sustituir donde pone MainWindow por MyWindow, que es el que invoca tu programa en python
    Un saludo y gracias por este excelente tutorial.

    1. PythonDiario dice:

      Gracias Daniel por visitar y participar en el blog. Estoy esperando respuestas del compañero para ver si soluciono su problema. Saludos

  8. Unknown dice:

    Hola Diego, ya realice el ejemplo en windows con python 2.7.9 y PyQt4-4.11.3-gpl-Py2.7-Qt4.8.6-x32 que es lo estoy aprendiendo, y cuando se ejecuta me da el error:
    Traceback (most recent call last):
    File "C:cabsgpyconversortempconv.py", line 7, in
    class MyWindowClass(QtGui.QMainWindow, form_class):
    File "C:cabsgpyconversortempconv.py", line 26, in MyWindowClass
    MyWindow = MyWindowClass(None)
    NameError: name 'MyWindowClass' is not defined
    Y para el archivo *.ui lo cambie por este: form_class = uic.loadUiType("C:/cabs/gpy/conversor/tempconv.ui")[0]
    este ejemplo es a partir ya de la version 2.7 gracias

    1. PythonDiario dice:

      Hola Celestino. ¿El código que implementaste está tal cual lo publicado en la entrada?. Lo acabo de probar de nuevo (copiando y pegando) solo modifico el archivo .ui que quiero cargar (con su respectiva ruta) y me funciona correctamente. Por alguna razón no te esta reconociendo la clase: MyWindowClass que se define al inicio del código. Saludos

  9. Anónimo dice:

    hola diego estoy comenzando con python y buscaba algo para aplicaiones de forma grafica, mi duda es si necesariamente siempre tengo que salirme al ide para el codigo, o hay manera de programar el boton directamente desde qtdesigner al estilo gambas o vb, disculpa mi ignorancia. att javier

    1. PythonDiario dice:

      Hola, Gracias por visitar el Blog. Creo que en QtDesigner no se puede hacer, pero en QTCreator si (ya viene para diseñar y programar), tengo que probarlo. Y creo que existen más ides para esto, pero no los he probado. Saludos

    2. Anónimo dice:

      Gracias por responder, bueno en cuanto tengas informacion publicas algo si puedes de igual manera investigare y lo informare por aca, lei por encima que boa constructor hacia este trabajo pero han dejado el proyecto a un lado.

  10. Anónimo dice:

    Muchas gracias Diego, soy nueva en python y me ayudo bastante la forma en como explicas los ejercicios.
    Saludos 🙂

    1. PythonDiario dice:

      Hola, gracias por visitarnos ;). Me alegra te sea de ayuda lo que compartimos. Cualquier duda estamos por acá.
      Saludos

    2. Anónimo dice:

      Muy amable Diego y espero contribuir a este blog pronto con lo que estoy aprendiendo gracias a ti.

      Att. Janneth

  11. JRobles dice:

    Que tal.

    Estoy entrando al mundo de python aunque ya tengo bases de programacion en lenguajes viejos que hoy pocos saben que existieron...

    El asunto es que al transcribir el ejemplo... incluso desde el mismo sublime text, me marca la ultima instruccion como no reconocida:
    app.exec ()

    y al ejecutar en la terminal con python tempconv.py... me dice lo siguiente:

    Traceback (most recent call last):
    File "tempconv.py", line 37, in
    app.exe()
    AttributeError: 'QApplication' object has no attribute 'exe'

    ME puedes ayudar?

    Gracias deantemano

    Saludos

    1. Unknown dice:

      Amigo debería ser app.exec_()

      Saludos

  12. Jordi F. Guerrero dice:

    Estoy usando el Python portable, así como el QTDesigner portable que contiene este paquete. Tengo un problema... cuando abre la interfaz gráfica y presiono en alguno de los botones me aparece el siguiente error:

    Traceback (most recent call last):
    File "C:/Users/JooOoordy/Desktop/Conversor de temperatura/tempconv.py", line 23, in btn_CtoF_clicked
    cel = float(self.editCel.text())
    ValueError: could not convert string to float:

    1. PythonDiario dice:

      Hola Jordi, gracias por visitar el blog. Tienes todo el código bien tabulado? Probaste el código con python instalado y no portable? Saludos

  13. Jordi F. Guerrero dice:

    Este comentario ha sido eliminado por un administrador del blog.

  14. Gabibgc dice:

    Amigo, se puede editar los botones, etiquetas, etc para que queden mas o menos como tu ejemplo, con sombras y bordes mas redondeados por ejemplo?

    1. PythonDiario dice:

      Hola Gabibgc, gracias por visitar el blog. En QtDesigner puedes diseñarlo a tu medida. Saludos

  15. Anónimo dice:

    Amigo Una pregunta si deseo ponerle una imagen de fondo yo la creo con un label pero a la hora de ejecutar me muestra un error me podria decir que hacer

    1. PythonDiario dice:

      Hola, gracias por visitar y participar en el blog. Cual es el error y cual es el código? Saludos

  16. Christian dice:

    Hola,tengo una consulta, tengo una función creada, que me realiza una operación y el resultado lo necesito, cuál es la mejor opción?, llamar la función desde otro file, o copiar la función en el código de la interfaz?. Es un posicionador solar guiado por trayectoria. Gracias.

  17. El Master - Jhon Charlie dice:

    hola, muy buen tutorial, gracias por compartir tus conocimientos, aenas estoy empezando en python y qt, actualmente manejo c# pero un amigo me dijo que aprendiera python para hacer un trabajo conjunto de programacion.
    Si tienes por ejemplo otros ejemplos te lo agradeceriamos mucho.
    saludes desde Colombia.

    1. PythonDiario dice:

      Me alegro te sea de ayuda. Estamos a la inversa jeje yo estoy aprendiendo C#. Saludos

  18. Unknown dice:

    Todo esta exelente, pero como hacer para guardar una aplicacion claro con sus datos sin programas de base de datos, asi como notas de texto o algo asi o si quieres compartir el programa que hiciste en otra PC

    1. PythonDiario dice:

      Hola Rodolfo, como estas? Quizá esta entrada te puede ayudar: Crear ejecutable en python
      Saludos

  19. Unknown dice:

    Hola gracias por tu aporte y ayuda, me gustaría saber si de casualidad tienes un codigo donde trabajes con menús y subventanas me seria de gran ayuda o si me puedes decir alguna referencia..

  20. PythonDiario dice:

    Hola Sareth, como estas? espero que bien? De forma gráfica no tengo nada de lo que pides, quizá publique más adelante. Pero puedes pasarte por esta entrada:Agenda en Python con Sqlite Quizá te interese.
    Saludos y gracias por visitar el blog

  21. Unknown dice:

    Hola Diego, estoy comenzando en esto de programar en python y mi primera prueba es con tu ejemplo, pero me sale este error" ImportError: No module named 'PyQt4'
    Me aydudas a acLarar que estoy haciendo mal o que me falto?

    1. PythonDiario dice:

      Hola Osleby, seguramente te falta instalar el paquete de PyQt4: te lo dejo en esta entrada --> Instalar PyQt4

    2. Unknown dice:

      Hola Diego, Gracias por responder. Lo primero que hice fue eso, descargar Pyqt4 desde esa entrada y luego me vine a esta para arrancar con algún ejemplo, por lo que si, ya lo tengo instalado. Revisare paso a paso oootra vez.

    3. Unknown dice:

      Hola, corregí algunos errores, ahora aparece una pequeñita ventana que dice Python a la izquierda y mas nada, sin botones, ni etiquetas, ni spinbox ni nada... alguna sugerencia?

    4. PythonDiario dice:

      Hola, has podido avanzar? en que sistema operativo estas trabajando? hace tiempo que no toco el código jeje

    5. Unknown dice:

      Este comentario ha sido eliminado por el autor.

    6. Unknown dice:

      Hola, si, eso pensé cuando vi la fecha del post, así que gracias por responder. Estoy usando W7, PyQt4 y Python 3.4. Debería usar otra versión de alguno de estos?

    7. PythonDiario dice:

      Yo utilizo python 2.7, por ahí puede venir el problema!!!

    8. PythonDiario dice:

      No tienes instalado 2.7? o en una máquina virtual? para que puedas hacer la prueba. Saludos

    9. Unknown dice:

      A caramba, bueno, haré esos cambios a ver si resuelven el problema. Te estaré avisando. Muchas gracias! 🙂

    10. Unknown dice:

      Este comentario ha sido eliminado por el autor.

  22. Steve dice:

    Hola! hice todo tal cual el tutorial, pero me tira el siguiente error en la consola de python.
    SyntaxError: invalid syntax
    MyWindow = MyWindowClass(none)
    Traceback (most recent call last):
    File "stdin, line 1, in module
    NameError: 'MyWindowClass' si not defined.
    No se si tiene que ver algo con la version de python que tengo. Aclaro que uso en windows. Gracias

    1. PythonDiario dice:

      Hola Marcos, que version utilizas? porque en el tutorial utilizo python 2.7 y si lo copio y lo pego funciona correctamente. Saludos

    2. Steve dice:

      Ahh yo estaba usando la ultima version de pyQt y la ultima version de python, pero ahora desinstale esas e instale las mismas que descargas en el tuto de instalacion de python o sea la python-2.7.4 y PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7, pero me sigue tirando esos errores.

    3. Steve dice:

      No entiendo por que no me reconoce las clases.

  23. Gianmarco dice:

    Hola diego muchas gracias por todo lo que bienes haciendo por la comunidad de python.
    te pido un favor enorme, tengo problemas al momentode la importacion.
    primero para aclara que la importacion solo a PyQt4 no hay problema
    >>import PyQt4

    el problema radica en esta linea....
    >>> import sys

    >>> from PyQt4 import QtCore, QtGui, uic

    Traceback (most recent call last):
    File "", line 1, in

    ImportError: DLL load failed: %1 no es una aplicaci Win32 valida.

    En realidad no se que hacer, y me desespero por que no puedo avanzar tu tutorial.
    puedes comunicarte conmigo al gnavarro82@gmail.com

    Muchas gracias.

  24. Anónimo dice:

    excelente, una duda como hago para crear una interfaz pyqt que me los valores registrados en una tabla ( ya tengo la base de datos hecha) solo que al ejecutar el programa para que haga la captura, este se bloquea. muchas gracias por la atencion prestada

    1. PythonDiario dice:

      Hola, tienes algo de código o puedes mostrarnos el error que tienes para poder reproducirlo? Saludos y gracias por visitar el blog 😉

  25. Unknown dice:

    Sabes que Hermano Linux gracias por el Código fue de gran ayuda te lo agradesco solo que en el Articulo que Publicastes Tienes un herror de dedo en esta parte el " cuadro de números de la derecha (spinFhar) " al cambiar los nombres de los bototones devería ser (spinFahar) para que sea exitosa la conexión.

  26. Armando dice:

    ¿Como sería si deseo que el botón llame a la función con doble clic?

  27. Unknown dice:

    Hola buenisima la apliicacion para aprender, yo quiero migrarla a python 3 pero se me esta complicando , el problema es la linea form_class=uic.loadUiType.. me podria alguien ayudar coneso? gracias

  28. Unknown dice:

    Hola diego, muy bueno el articulo. Me aparece un error en el codigo cuando lo ejecuto, este es el error:File "tempconv.py", line 12, in __init__
    self.btn_CtoF.clicked.connect(self.btn_CtoF_clicked)
    AttributeError: 'MyWindowClass' object has no attribute 'btn_CtoF_clicked'
    Espero que me puedas contestar, gracias y saludos.

    1. PythonDiario dice:

      Hola Lautaro, tienes el código tal cual el ejemplo?

  29. neodevilcry dice:

    siguien el consego del post de pdf empec epor el primer totorial, pero sigo los pasos al pie y me sale esto cuando corro el programa

    Traceback (most recent call last):
    File "tempconv.py", line 29, in btn_FtoC_clicked
    fahr = self.spinFahr.value()
    AttributeError: 'MyWindowClass' object has no attribute 'spinFahr'
    Traceback (most recent call last):
    File "tempconv.py", line 23, in btn_CtoF_clicked
    cel = float(self.editCel.text())
    ValueError: could not convert string to float:

  30. neodevilcry dice:

    soy un desastre en python creo que me regreso a java

  31. Jean Paul Gotopo dice:

    Para los que tienen PyQt5 el codigo es como sigue:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-

    # Convierte temperaturas
    # https://www.pythondiario.com

    import sys
    from PyQt5 import QtCore, QtGui, QtWidgets, uic

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

    class MyWindowClass(QtWidgets.QMainWindow, form_class):
    def __init__(self, parent=None):
    QtWidgets.QMainWindow.__init__(self, parent)
    self.setupUi(self)
    self.btn_CtoF.clicked.connect(self.btn_CtoF_clicked)
    self.btn_FtoC.clicked.connect(self.btn_FtoC_clicked)

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

    # Evento del boton btn_FtoC
    def btn_FtoC_clicked(self):
    fahr = self.spinFhar.value()
    cel = ((fahr - 32) * 5) / 9
    self.editCel.setText(str(cel))

    app = QtWidgets.QApplication(sys.argv)
    MyWindow = MyWindowClass(None)
    MyWindow.show()
    app.exec_()

    1. PythonDiario dice:

      Excelente Jean Paul, luego lo pruebo!!!
      Gracias por compartir

    2. Jean Paul Gotopo dice:

      Hola, Probaste siempre el código que puse para PyQt5?

  32. Unknown dice:

    Buenas, intente hacer lo mismo, pero me sale el siguiente error:
    AttributeError: module 'PyQt5.QtGui' has no attribute 'QMainWindow'

  33. Roberto dice:

    Muy buena su presentación Diego.
    Soy principiante en Python, me gusta mucho la programación y tengo como 35 años de estar en este negocio.

    Tengo una consulta. Como puedo hacer para que esa pantalla que usted confeccionó quede en forma Modal, por decirlo así, es decir que el usuario no pueda moverla con el mouse, del lugar que uno la pone. Que sea estática.
    Me gusta mucho este lenguaje, de hecho ya hice mi primer mantenimiento que incluye, consulta, modifica y borra datos de una tabla postgresql. Y está a la disposición del que lo necesite.

    De nuevo muchas gracias por su ayuda.

    Roberto
    Costa Rica.
    rmatarria@gmail.com

  34. Anónimo dice:

    Me estoy iniciando en python, y pyQt5, hice el ejemplo con el pyqtdesigner y lo guarde, cree el codigo .py, y me dio errores de nombre de etiquetas que corregi, luego dio el error:
    C:Proyectos PyQtConversor de temperatura>python tempconv.py
    Traceback (most recent call last):
    File "tempconv.py", line 8, in
    class MyWindowClass(QtGui.QMainWindow, form_class):
    AttributeError: module 'PyQt5.QtGui' has no attribute 'QMainWindow'

    busque en google y vi que cambiaban QtGui.QMainWindow por QtWidgets.QMainWindow, esto debe ser que realizaron cambios significativos entre la version 4 y la version 5 del Pyqt, ..... Existe alguna quia buena de pyqt5, algun sitio que comente los cambios ocurridos entre las versiones, los modulos que cambian, etc...

    1. Jean Paul Gotopo dice:

      Hola arriba puse el código para PyQt5, aqui te lo transcribo:
      Para los que tienen PyQt5 el codigo es como sigue:

      #!/usr/bin/python
      # -*- coding: utf-8 -*-

      # Convierte temperaturas
      # https://www.pythondiario.com

      import sys
      from PyQt5 import QtCore, QtGui, QtWidgets, uic

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

      class MyWindowClass(QtWidgets.QMainWindow, form_class):
      def __init__(self, parent=None):
      QtWidgets.QMainWindow.__init__(self, parent)
      self.setupUi(self)
      self.btn_CtoF.clicked.connect(self.btn_CtoF_clicked)
      self.btn_FtoC.clicked.connect(self.btn_FtoC_clicked)

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

      # Evento del boton btn_FtoC
      def btn_FtoC_clicked(self):
      fahr = self.spinFhar.value()
      cel = ((fahr - 32) * 5) / 9
      self.editCel.setText(str(cel))

      app = QtWidgets.QApplication(sys.argv)
      MyWindow = MyWindowClass(None)
      MyWindow.show()
      app.exec_()

  35. Anónimo dice:

    Hace falta una guía completa con la nueva versión PyQt5 :/ por que estoy vuelto un 8...

    1. Jean Paul Gotopo dice:

      Con PyQt5 queda asi:
      Para los que tienen PyQt5 el codigo es como sigue:

      #!/usr/bin/python
      # -*- coding: utf-8 -*-

      # Convierte temperaturas
      # https://www.pythondiario.com

      import sys
      from PyQt5 import QtCore, QtGui, QtWidgets, uic

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

      class MyWindowClass(QtWidgets.QMainWindow, form_class):
      def __init__(self, parent=None):
      QtWidgets.QMainWindow.__init__(self, parent)
      self.setupUi(self)
      self.btn_CtoF.clicked.connect(self.btn_CtoF_clicked)
      self.btn_FtoC.clicked.connect(self.btn_FtoC_clicked)

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

      # Evento del boton btn_FtoC
      def btn_FtoC_clicked(self):
      fahr = self.spinFhar.value()
      cel = ((fahr - 32) * 5) / 9
      self.editCel.setText(str(cel))

      app = QtWidgets.QApplication(sys.argv)
      MyWindow = MyWindowClass(None)
      MyWindow.show()
      app.exec_()

  36. Anónimo dice:

    Hola

    Es un auténtico placer encontrar webs como esta en la que os tomáis la molestia de explicar tan bien explicadas las cosas.

    En mi caso tengo bastante experiencia programando en otros lenguajes y ahora acabo de empezar con Python con la idea de utilizarlo en mi RaspberryPi, y son precisamente webs como esta las que facilitáis la vida de los programadores a la hora de adentrarnos en nuevos lenguajes de programación.

    Os estoy muy agradecido por vuestro esfuerzo y dedicación.

    ¡¡Muchas gracias!!

    1. PythonDiario dice:

      Muchas gracias por tu comentario, estas palabras nos ayudan a seguir compartiendo. Saludos

  37. Unknown dice:

    como se puede hacer un ejecutable cuando ya se tiene el archivo .py y .ui

  38. Noel Sandate dice:

    hola aparte del metodo clicked a un boton, que otro metodo o de que otra manera puedo usar mi boton cuando no este presionado.

  39. Wilpolanis dice:

    Hola amigo un saludo, gracias por tus tutoriales.
    he querido llevar un paso más adelante, para crear un ejecutable con un icono como una aplicación de distribución en cualquier computador, recurriendo a la herramienta pyintsaller.
    Siempre que lo hago sale " failed to execute script nombreapp ", recurro a escribir en la consola lo siguiente:
    C:UsersRuta archivo>pyinstaller --windowed--onefile=./nombreapp.ico nombreapp.py
    serias tan gentil de darme una ayudita....

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir
White Monkey