Foros del Web » Programando para Internet » Python »

Layouts en PyQt4

Estas en el tema de Layouts en PyQt4 en el foro de Python en Foros del Web. Tengo este código: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Python: Ver original import sys , os from PyQt4. QtGui import * from PyQt4. QtCore import *   class ...
  #1 (permalink)  
Antiguo 07/11/2012, 08:32
 
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 9 meses
Puntos: 18
Layouts en PyQt4

Tengo este código:
Código Python:
Ver original
  1. import sys, os
  2. from PyQt4.QtGui import *
  3. from PyQt4.QtCore import *
  4.  
  5. class Tempz(QWidget):
  6.  
  7.     def __init__(self, parent=None):
  8.        
  9.         super(Tempz, self).__init__(parent)
  10.         self.timer = QTimer(self)
  11.         self.lcd = QLCDNumber(self)
  12.         self.spinbox = QSpinBox(self)
  13.         self.spinbox2 = QSpinBox(self)
  14.         self.bto = QPushButton('start', self)
  15.         self.label = QLabel('Seconds',self)
  16.         self.label2 = QLabel('Minutes', self)
  17.         self.lineEdit = QLineEdit(self)
  18.         self.label3 = QLabel('Command',self)
  19.  
  20.         self.start_time = self.spinbox.value()
  21.        
  22.         self.lcd.display("{0}:{1:02d}" .format(self.start_time/60,self.start_time % 60))
  23.         self.resize(300, 200)
  24.         self.setWindowTitle('Crono')
  25.        
  26.         self.layout = QVBoxLayout(self)
  27.         self.layout2 = QHBoxLayout(self)
  28.         self.layout3 = QHBoxLayout(self)
  29.        
  30.         self.layout.addWidget(self.bto)
  31.         self.layout.addWidget(self.lcd)
  32.        
  33.         self.layout2.addWidget(self.label)
  34.         self.layout2.addWidget(self.spinbox)
  35.         self.layout2.addWidget(self.label2)
  36.         self.layout2.addWidget(self.spinbox2)
  37.         self.layout2.setSpacing(10)
  38.  
  39.         self.layout3.addWidget(self.label3)
  40.         self.layout3.addWidget(self.lineEdit)
  41.        
  42.         self.layout.addLayout(self.layout2)
  43.         self.layout.addLayout(self.layout3)
  44.         self.setLayout(self.layout)
  45.        
  46.         self.timer.timeout.connect(self.upTimer)
  47.         self.bto.clicked.connect(self.cont)
  48.         self.show()
  49.        
  50.     def cont(self):
  51.         if self.spinbox.value():
  52.             self.start_time = self.spinbox.value()+self.spinbox2.value()*60
  53.         else: self.start_time = self.spinbox2.value()*60+self.spinbox.value()
  54.        
  55.         self.timer.stop()
  56.         self.lcd.display("{0}:{1:02d}" .format(self.start_time/60,self.start_time % 60))
  57.         self.timer.start(1000)
  58.        
  59.     def upTimer(self):
  60.         command =  self.lineEdit.text()
  61.         self.start_time -= 1
  62.         if self.start_time >= 6:
  63.             self.lcd.display("{0}:{1:02d}" .format(self.start_time/60,self.start_time % 60))
  64.         elif self.start_time >= 1:
  65.             self.lcd.display("{0}:{1:02d}" .format(self.start_time/60,self.start_time % 60))
  66.             os.system('beep -l 100')
  67.         else:
  68.             self.lcd.display("{0}:{1:02d}" .format(self.start_time/60,self.start_time % 60))
  69.             os.system('beep -l 500')
  70.             self.timer.stop()
  71.             os.system(str(command))
  72.        
  73.  
  74. app = QApplication(sys.argv)
  75. tempz = Tempz()
  76. tempz.show()
  77. app.exec_()

Que funciona correctamente en python, pero arroja por terminal un error referente a los layouts:
Código:
QLayout: Attempting to add QLayout "" to Tempz "", which already has a layout
Estoy buscando información de como gestionar estos layouts sin diseñador de intefaces, pues me resulta mas cómodo. He revisado la documentación de riverbank y de nokia, pero no acabo de entender el porqué de este error.
Sabeis donde está el error o donde encontrar información.

Saludos.
  #2 (permalink)  
Antiguo 07/11/2012, 16:02
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Layouts en PyQt4

Regla simple, un layout por widget.

La única diferencia con tu código, es que QVBoxLayout() o QHBoxLayout() no le mando ningún argumento (o sea que no le indico ningún padre).

Código Python:
Ver original
  1. import sys, os
  2. from PyQt4.QtGui import *
  3. from PyQt4.QtCore import *
  4.  
  5. class Tempz(QWidget):
  6.  
  7.     def __init__(self, parent=None):
  8.        
  9.         super(Tempz, self).__init__(parent)
  10.         self.timer = QTimer(self)
  11.         self.lcd = QLCDNumber(self)
  12.         self.spinbox = QSpinBox(self)
  13.         self.spinbox2 = QSpinBox(self)
  14.         self.bto = QPushButton('start', self)
  15.         self.label = QLabel('Seconds',self)
  16.         self.label2 = QLabel('Minutes', self)
  17.         self.lineEdit = QLineEdit(self)
  18.         self.label3 = QLabel('Command',self)
  19.  
  20.         self.start_time = self.spinbox.value()
  21.        
  22.         self.lcd.display("{0}:{1:02d}" .format(self.start_time/60,self.start_time % 60))
  23.         self.resize(300, 200)
  24.         self.setWindowTitle('Crono')
  25.        
  26.         self.layout1 = QVBoxLayout()
  27.         self.layout2 = QHBoxLayout()
  28.         self.layout3 = QHBoxLayout()
  29.        
  30.         self.layout1.addWidget(self.bto)
  31.         self.layout1.addWidget(self.lcd)
  32.        
  33.         self.layout2.addWidget(self.label)
  34.         self.layout2.addWidget(self.spinbox)
  35.         self.layout2.addWidget(self.label2)
  36.         self.layout2.addWidget(self.spinbox2)
  37.         self.layout2.setSpacing(10)
  38.  
  39.         self.layout3.addWidget(self.label3)
  40.         self.layout3.addWidget(self.lineEdit)
  41.        
  42.         self.layout1.addLayout(self.layout2)
  43.         self.layout1.addLayout(self.layout3)
  44.         self.setLayout(self.layout1)
  45.        
  46.         self.timer.timeout.connect(self.upTimer)
  47.         self.bto.clicked.connect(self.cont)
  48.         self.show()
  49.        
  50.     def cont(self):
  51.         if self.spinbox.value():
  52.             self.start_time = self.spinbox.value()+self.spinbox2.value()*60
  53.         else: self.start_time = self.spinbox2.value()*60+self.spinbox.value()
  54.        
  55.         self.timer.stop()
  56.         self.lcd.display("{0}:{1:02d}" .format(self.start_time/60,self.start_time % 60))
  57.         self.timer.start(1000)
  58.        
  59.     def upTimer(self):
  60.         command =  self.lineEdit.text()
  61.         self.start_time -= 1
  62.         if self.start_time >= 6:
  63.             self.lcd.display("{0}:{1:02d}" .format(self.start_time/60,self.start_time % 60))
  64.         elif self.start_time >= 1:
  65.             self.lcd.display("{0}:{1:02d}" .format(self.start_time/60,self.start_time % 60))
  66.             os.system('beep -l 100')
  67.         else:
  68.             self.lcd.display("{0}:{1:02d}" .format(self.start_time/60,self.start_time % 60))
  69.             os.system('beep -l 500')
  70.             self.timer.stop()
  71.             os.system(str(command))
  72.        
  73.  
  74. app = QApplication(sys.argv)
  75. tempz = Tempz()
  76. tempz.show()
  77. app.exec_()
  #3 (permalink)  
Antiguo 08/11/2012, 03:02
 
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 9 meses
Puntos: 18
Respuesta: Layouts en PyQt4

Mil gracias Raz.

Saludos.

Etiquetas: gui, import, layouts, pyqt4
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:20.