lunes, 29 de junio de 2015

9 - Python PyQt (Interfaz gráfica) - List Widget (Selección de elementos)




En este capítulo del tutorial de Python 3 más PyQt5, veremos un ejemplo con el objeto List Widget, este objeto nos permite crear una lista de items, los cuales pueden ser seleccionados por el usuario.

En el capítulo veremos como obtener los items seleccionados por el usuario, como agregar nuevos items y como eliminar items.

El ejemplo lo basaremos en un archivo ui creado con Designer llamado listwidget.ui

  • Agregaremos un objeto List Widget con 4 items: Python - PHP - Perl - Ruby
  • Al objeto List Widget le daremos el nombre lenguajes y haremos que sea posible la multiselección de items, modificando la propiedad selectionMode a MultiSelection e indicaremos un item seleccionado por defecto, modificando la propiedad currentRow con el valor 0, para seleccionar al item Python por defecto.
  • Agregar un objeto Push Button con el texto "Enviar" y el nombre boton.
  • Agregar un objeto Label con el nombre labelMensaje y le quitaremos el texto que viene por defecto.


listwidget.pyw


import sys
from PyQt5.QtWidgets import QApplication, QDialog
from PyQt5 import uic

class Dialogo(QDialog):
	def __init__(self):
		QDialog.__init__(self)
		uic.loadUi("listwidget.ui", self)
		self.boton.clicked.connect(self.getItems)
		#Agregar un nuevo item
		#self.lenguajes.addItem("Visual Basic")
		#Eliminar un item
		#self.deleteItem("Python")
		
	def deleteItem(self, label):
		#Array para almacenar cada item objeto
		items = []
		#Recorrer item a item
		for x in range(self.lenguajes.count()):
			item = self.lenguajes.item(x)
			items.append(item)
		#este array almacena el texto de cada item
		labels = [i.text() for i in items]
		#Recorrer item a item el array labels
		for x in range(len(labels)):
			#Si el item existe
			if labels[x] == label:
				#Eliminar
				item = self.lenguajes.indexFromItem(self.lenguajes.item(x))
				self.lenguajes.model().removeRow(item.row())
		
	def getItems(self):
		items = self.lenguajes.selectedItems()
		#Array para guardar los items seleccionados
		selected = []
		for x in range(len(items)):
			selected.append(self.lenguajes.selectedItems()[x].text())
		self.labelLenguajes.setText("Seleccionados: " + "-".join(selected))
			
		
app = QApplication(sys.argv)
dialogo = Dialogo()
dialogo.show()
app.exec_()