comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[SOLUCIONADO] Funcion de boton PyQT4

  • 7 Respuestas
  • 2904 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fortil

  • *
  • Underc0der
  • Mensajes: 175
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« en: Agosto 13, 2013, 05:07:36 pm »
Hola a todos(as)

resulta que tengo el siguiente cronómetro creado en QTDesing (sencillo)

Código: Python
  1. from PyQt4 import QtCore, QtGui
  2.  
  3. try:
  4.     _fromUtf8 = QtCore.QString.fromUtf8
  5. except AttributeError:
  6.     _fromUtf8 = lambda s: s
  7.  
  8. class Ui_cronometro(object):
  9.     def setupUi(self, cronometro):
  10.         cronometro.setObjectName(_fromUtf8("cronometro"))
  11.         cronometro.resize(288, 57)
  12.         cronometro.setWindowFlags(QtCore.Qt.FramelessWindowHint)
  13.         self.gridLayoutWidget = QtGui.QWidget(cronometro)
  14.         self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 10, 272, 41))
  15.         self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget"))
  16.         self.gridLayout = QtGui.QGridLayout(self.gridLayoutWidget)
  17.         self.gridLayout.setMargin(0)
  18.         self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
  19.         self.lcdNumber = QtGui.QLCDNumber(self.gridLayoutWidget)
  20.         self.lcdNumber.setProperty("intValue", 0)
  21.         self.lcdNumber.setObjectName(_fromUtf8("lcdNumber"))
  22.         self.gridLayout.addWidget(self.lcdNumber, 0, 0, 1, 1)
  23.         self.label = QtGui.QLabel(self.gridLayoutWidget)
  24.         self.label.setObjectName(_fromUtf8("label"))
  25.         self.gridLayout.addWidget(self.label, 0, 1, 1, 1)
  26.         self.toolButton = QtGui.QToolButton(self.gridLayoutWidget)
  27.         self.toolButton.setObjectName(_fromUtf8("toolButton"))
  28.         self.gridLayout.addWidget(self.toolButton, 0, 2, 1, 1)
  29.  
  30.         self.retranslateUi(cronometro)
  31.         QtCore.QMetaObject.connectSlotsByName(cronometro)
  32.         QtCore.QObject.connect(self.toolButton, QtCore.SIGNAL(_fromUtf8("clicked()")), cronometro.close)
  33.  
  34.     def retranslateUi(self, cronometro):
  35.         cronometro.setWindowTitle(QtGui.QApplication.translate("cronometro", "Sesion", None, QtGui.QApplication.UnicodeUTF8))
  36.         self.label.setText(QtGui.QApplication.translate("cronometro", "min restantes", None, QtGui.QApplication.UnicodeUTF8))
  37.         self.toolButton.setText(QtGui.QApplication.translate("cronometro", "Cerrar Sesion", None, QtGui.QApplication.UnicodeUTF8))
  38.  
  39.  
  40. if __name__ == "__main__":
  41.     import sys
  42.     app = QtGui.QApplication(sys.argv)
  43.     cronometro = QtGui.QWidget()
  44.     ui = Ui_cronometro()
  45.     ui.setupUi(cronometro)
  46.     cronometro.show()
  47.     sys.exit(app.exec_())
  48.  
  49.  

y lo llamo desde otro archivo que tiene mas cosas con una clase, la clase es esta (para no llenar esto de códigos)

Código: Python
  1. class Tiempo(QtGui.QDialog):
  2.         def __init__(self, parent=None):
  3.                 QtGui.QWidget.__init__(self, parent)
  4.                 self.timer = QtCore.QBasicTimer()
  5.                 self.c = Ui_cronometro()
  6.                 self.c.setupUi(self)
  7.                 QtCore.QObject.connect(self.c.toolButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.quit1)
  8.                 self.step = 90
  9.                 self.h = int(self.step)/60
  10.                 self.m = int(self.step)%60
  11.                 self.codigo = None
  12.                 self.doAction()
  13.                
  14.         def doAction(self):
  15.                 self.timer.start(60000,self)
  16.                
  17.         def timerEvent(self, e):
  18.                 vent = VentanaPrincipal()
  19.                 if self.m > 0:
  20.                         self.m -= 1
  21.                         self.c.lcdNumber.display("%d:%d" % (self.h,self.m))
  22.                 else:
  23.                         self.m = 60
  24.                         self.h -= 1
  25.                         self.c.lcdNumber.display("%d:%d" % (self.h,self.m))
  26.                                
  27.                 if self.step == 10:
  28.                         vent.popup("Faltan "+str(self.step)+" minutos","le queda "+str(self.step)+"min de tiempo para estar en la sala, guarde todo ya que puede perder lo que ha hecho",1)
  29.                 if self.step == 3:
  30.                         vent.popup("Faltan "+str(self.step)+" minutos","le queda "+str(self.step)+"min de tiempo para estar en la sala, guarde todo ya que puede perder lo que ha hecho",3)
  31.                 if self.step == 0:
  32.                         self.quit1()
  33.                         return
  34.  
  35.                 self.step = self.step - 1
  36.                 #~ self.c.lcdNumber.display(self.step)
  37.                
  38.         def quit1(self):
  39.                 self.timer.stop()
  40.                 ........
  41.  

Resulta que lo que quiero es que en el momento que se llame la función def quit1(self): esta actué igual que QtCore.QObject.connect(self.toolButton, QtCore.SIGNAL(_fromUtf8("clicked()")), cronometro.close) (como su función en el botón, pero sin tocarlo) he tratado de pasarle el mismo parámetro de cronometro.close en esa función pero no me va, también he tratado de pasar self.c.close e igual me sale error.

Lo que quiero es que este se cierre en el momento en que se acaba el tiempo.

MUCHAS GRACIAS
« Última modificación: Mayo 03, 2014, 11:46:05 am por Flemon »

Desconectado WhiZ

  • *
  • Underc0der
  • Mensajes: 395
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #1 en: Agosto 13, 2013, 06:51:46 pm »
Para que funcione tenés que escribir self.close().

Voy a hacer una observación que espero que no te ofenda (ya que no es mi intención; sólo quiero darte una mano ;)).

La verdad es que me parece que estás haciendo algunas cosas sin entender bien porqué, lo cual lo atribuyo a que te falta un poco de práctica con POO, así como con PyQt.

Ojo! No es que vengas mal (todo lo contrario), pero creo que podrías mejorar si cambiaras algunas cosas:

    1. Tendrías que ordenar un poquito más tu código.

    2. Yo empezaría escribiendo programas "manualmente" y luego seguiría con QtDesigner (esto te lo digo para familiarizarte más rápido con PyQt).
        Creo que si empezás con QtDesigner de una, vas a delegar muchos líneas al programa y a dificultar el entendimiento del código (aquí te pasó con los Signals&Slots, por ej.).

Me parece estupendo que estés tan avanzado ya en python. Si le seguís metiendo garra como hasta ahora, cuando te quieras acordar ya vas a estar haciendo grandes proyectos con PyQt.

Espero que te sirvan mis recomendaciones y, por supuesto, si tenés alguna duda o necesitas ayuda con algo, no dudes en postear (intentando ayudarte yo tmb aprendo y practico).

Saludos!
WhiZ

P.D.: Hay unas cuantas cosas para corregir en el código, pero te dejo que vos lo investigues ;).


Desconectado fortil

  • *
  • Underc0der
  • Mensajes: 175
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #2 en: Agosto 13, 2013, 07:23:46 pm »
WhiZ, si tenes razón me falta bastante en PyQT y python, sino que es un hobby y cada vez que tengo tiempo (cuando estoy en vacaciones sobre todo) hago algo, ya que estudio Química.

LE estoy dando a PyQT4 porque antes trabajaba con Wx, y aunque es más fácil (porque ya lo tenía bastante recorrido) me quedaba corto en el entorno gráfico por falta de diseñadores, ahora me quedo corto en el código por falta de manuales o tutoriales completos (  :P ) del código de PyQT y también el diseñador (aunque se puede entender con los mismos de C++).


Ahora en lo del código, tenías razón también era solo poner eso, es que la verdad me falta un poco del entendimiento POO, antes ya estoy dándole a las clases y que hace rato no tocaba python.

gracias de nuevo men, si me puedes pasar unos tutos o manuales mas profundos sobre cosas de PyQT te lo agradecería bastante.

Desconectado Once

  • *
  • Underc0der
  • Mensajes: 391
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • El blog de Once
  • Twitter: @don_once
« Respuesta #3 en: Agosto 13, 2013, 07:44:08 pm »
Ese es el problema que tenemos los que manejamos QT, la poca documentación, en especial para Python, pero hay webs que son de mucha ayuda: http://pyqt.sourceforge.net/Docs/PyQt4/classes.html esa es la que uso cuando voy a desarrollar en QT (espero te sea de ayuda)

Saludos!

Desconectado fortil

  • *
  • Underc0der
  • Mensajes: 175
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #4 en: Agosto 13, 2013, 07:54:27 pm »
:D gracias men.

Por último, he estado averiguando como obtener el teclado en una pantalla para hacer alguna función y me ha servido, pero no he podido para evitar que cierren la ventana con el (ALT +F4) ¿de pronto saben algo al respecto?

gracias de nuevo

Desconectado Once

  • *
  • Underc0der
  • Mensajes: 391
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • El blog de Once
  • Twitter: @don_once
« Respuesta #5 en: Agosto 13, 2013, 08:04:25 pm »
Intenta ignorando el evento con:

Código: Python
  1. def closeEvent(self, event):
  2.         event.ignore()
  3.  

Saludos!

Desconectado WhiZ

  • *
  • Underc0der
  • Mensajes: 395
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #6 en: Agosto 13, 2013, 08:29:14 pm »
A decir verdad, nunca leí ningún manual de pyqt. Creo que hay uno en inglés que es bastante completo pero no te lo podría asegurar.

Particularmente creo que lo mejor es lo que dice @11Sep. Yo uso mucho pyqt.sourceforge.net y riverbankcomputing. Realmente vas a encontrar todo acerca de cada clase y método que quieras utilizar.

Otra opción muy interesante es la que comencé a practicar hace un tiempo (cuando comencé a estudiar java y a usar eclipse). La verdad que desde que lo empecé a utilizar, eclipse me fascinó por varias razones, pero principalmente por 2.

La primera es que me parece 100% organizado. Permite distinguir rápidamente cuáles son las clases con las que estamos trabajando, así como sus métodos y atributos (extremadamente necesario en grandes/medianos proyectos principalmente).

La segunda razón es que permite explorar cada uno de los elementos que componen a una clase. Por ej., cuando pones "objeto." se carga un menú con todos los métodos y atributos de la clase, y no sólo eso, sino que además, al pasar el mouse por encima del método, aparece el código del mismo permitiendo deducir cómo funciona y cómo usarlo.

Probá con eso que vas a andar bien. Para encontrar rápido la documentación de las 2 páginas que te mencioné (pyqt.sourceforge.net y riverbankcomputing) usa google (escribis "pyqt qlabel", por ej., y vas a ver q aparece alguna de esas dos páginas con la documentación completa).

Saludos!
WhiZ


Desconectado Once

  • *
  • Underc0der
  • Mensajes: 391
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • El blog de Once
  • Twitter: @don_once
« Respuesta #7 en: Agosto 15, 2013, 04:26:28 am »
Lo que dice @WhiZ es verdad. PyQt lo aprendes a prueba y error y con mucha ayuda de Google.

Eclipse no me gusta, lo probé un par de veces (me dió muchos dolores de cabeza en Arch) y me pareció muy pesado, en especial para desarrollar en Python, es como matar moscas a cañonazos. Prefiero IDE's como Open Komodo o SPE. Pero esto ya es cuestión de gustos.

Saludos!

 

¿Te gustó el post? COMPARTILO!



[SOLUCIONADO] ¿Kali Linux o Kali Linux Ligth ?

Iniciado por worq

Respuestas: 2
Vistas: 8398
Último mensaje Noviembre 21, 2017, 12:28:54 pm
por Codig0Bit
[SOLUCIONADO] ¿Como publicar un software como software libre?

Iniciado por FuriosoJack

Respuestas: 2
Vistas: 1716
Último mensaje Mayo 23, 2017, 07:24:22 am
por HATI
[SOLUCIONADO] Multiuploader de imagenes con mysql, hosting de imagenes con mysql

Iniciado por graphixx

Respuestas: 4
Vistas: 2298
Último mensaje Marzo 26, 2013, 05:42:58 pm
por Xt3mP
[SOLUCIONADO] Linux Mint, errores, errores y mas errores...

Iniciado por n1sendev

Respuestas: 12
Vistas: 3200
Último mensaje Noviembre 22, 2017, 06:50:55 am
por RuidosoBSD
[SOLUCIONADO] Ayuda urgente con Virus "Virus.Win32Sality"

Iniciado por Napsters

Respuestas: 6
Vistas: 3569
Último mensaje Junio 11, 2012, 03:38:18 am
por Satyricon