Se utilizarán los siguientes widgets:
- Qbutton: Botón de iniciar y detener la barra de progreso y el botón salir.
- QProgressBar: Es el widget de la barra de progreso.
- QTimer: Provee un timer que es quien maneja el progreso de la barra.
El código del programa se muestra a continuación:
#!/usr/bin/env python import sys from PyQt4 import QtGui from PyQt4 import QtCore class App(QtGui.QWidget): def __init__(self,parent=None): QtGui.QWidget.__init__(self, parent) #Se define el tamano de la ventana self.setGeometry(400, 400, 250, 150) #Se le coloca un titulo a la ventana y se asocia un icono. self.setWindowTitle('Barra de progreso') self.setWindowIcon(QtGui.QIcon('./openlogo-50.png')) #Se definen los widgets a utilizar en la ventana. #Se crea la instancia de la barra de progreso. self.pbar = QtGui.QProgressBar(self) #Se crea el boton que inicia/detiene la barra de progreso self.button = QtGui.QPushButton('Iniciar', self) #Se define una politica al boton de no foco self.button.setFocusPolicy(QtCore.Qt.NoFocus) #Se define el boton salir. self.quit = QtGui.QPushButton('Salir', self) #Se crea la instancia timer con el contador en cero self.timer = QtCore.QBasicTimer() self.step = 0 #se asocia los eventos de los 2 botones. self.connect(self.button, QtCore.SIGNAL('clicked()'),self.Accion) self.connect(self.quit, QtCore.SIGNAL('clicked()'),QtGui.qApp, QtCore.SLOT('quit()')) #Se define como empaquetar los widgets. #En este caso se usa grilla. #Se crea la instancia grid = QtGui.QGridLayout() grid.setSpacing(10) #Se agrupan los widgets pasando el #objeto luego el orden en vertical, el orden en #horizontal. grid.addWidget(self.pbar, 1, 0) grid.addWidget(self.button, 2, 0) grid.addWidget(self.quit, 3, 1) #Se define el layout pasando la grilla self.setLayout(grid) def timerEvent(self, event): #funcion asociada al timer. #Si el contador llega a 100 #Se detiene el timer, se cambia el titulo #del boton, se coloca el contador en cero #y se sale de la funcion. #Si no llega a 100, se incrementa en 1 el contador y #se le asigna un nuevo valor a la barra de progreso. if self.step >= 100: self.timer.stop() self.button.setText('Iniciar') self.step = 0 return self.step = self.step + 1 self.pbar.setValue(self.step) def Accion(self): #Si el timer esta activo se detiene y se #le cambia el titulo al boton con Iniciar. if self.timer.isActive(): self.timer.stop() self.button.setText('Iniciar') else: #Si no esta activo el timer, se inicia con valor de 100 #se coloca el titulo detener al boton. self.timer.start(100, self) self.button.setText('Detener') #Se ejecuta el programa principal if __name__ == "__main__": #Se instancia la clase QApplication app = QtGui.QApplication(sys.argv) #Se instancia el objeto QuitButton qb = App() #Se muestra la aplicacion qb.show() #Se sale de la aplicacion sys.exit(app.exec_())
Las 3 siguientes figuras muestran el funcionamiento del programa (al iniciarse el programa, iniciar la barra de progreso y al detenerse):
No hay comentarios:
Publicar un comentario