PyQT-5 Controles Para Visualizar Listas
Este tutorial trata sobre aquellos controles que nos permiten visualizar una lista de elementos y seleccionar o varios elementos de la lista, entre los más comunes tenemos: QComboBox, QListWidget, QTableVidget, veremos un ejemplo donde presentamos cada uno de estos widgets de la biblioteca pyqt-5.
Este muestra sus elementos en una lista desplegable que se muestra cuando el usuario hace clic sobre él, podemos seleccionar un elemento de la lista, al hacerlo se lanza el evento currentTextChanged que nos indica que el texto seleccionado ha cambiado.
Agregamos elementos al QComboBox usando su método addItems(ítem_list) donde le pasamos la lista de elementos que deseamos mostrar, podemos agregar elementos uno a uno usando el método addItem(item), para seleccionar un elemento mediante programación contamos con setItemText(int, str) donde indicamos primero el índice del elemento que deseamos seleccionar, luego el texto a seleccionar.
Este control es bastante similar al anterior salvo que la lista siempre está visible, podemos decir que un QComboBox usa un QListWidget para mostrar su lista de elementos, manejamos el evento itemSelectionChanged para saber cuándo se ha seleccionado un nuevo elemento, si deseamos saber cuál es el elemento actualmente seleccionado usamos en método currentItem() que devuelve el objeto QListWidgetItem que representa dicho elemento, usamos el método QListWidgetItem.text() para obtener el texto mostrado.
Este control nos permite presentar la información en formato tabular, en filas, columnas y celdas, para establecer los nombres de cabecera de las columnas usaremos el método setHorizontalHeaderLabels(['Nombre', 'Edad', 'Nacionalidad']) pasándole en orden cada uno de los nombres para las columnas.
Para agregar elementos a este control usamos su método setItem() indicándole primero, el índice de la fila a la que pertenece, segundo, el índice de la columna y por último el dato a mostrar.
Al igual que el control anterior manejamos en evento itemSelectionChanged que se produce cada vez que se selecciona un elemento, para nuestro ejemplo cambiamos en comportamiento del control en cuanto a la selecciona de elementos indicando que solo deseamos seleccionar filas, usando el método: setSelectionBehavior(QTableWidget.SelectRows), el comportamiento por defecto permite la selección de filas (SelectRows), columnas (SelectColumns) o celdas individualmente (SelectItems), usamos también setSelectionMode(QTableWidget.SingleSelection) para indicar que solo permitiremos la selección de un elemento a la vez, por defecto es posible seleccionar varios elementos.
Para obtener el elemento seleccionado usamos el método self.table.selectedItems() como solo seleccionamos filas, una a la vez, este método nos devuelve los elementos que componen la fila, si la seleccionar fuera la celda individual nos devolvería el valor de dicha celda, si la selección fuera una columna nos devolvería los datos de la columna.
Con esto cada vez que se selecciona una fila obtenemos: el nombre, la edad y el país al que pertenece cada persona.
GitHub: Controles Tipo Lista PyQT-5
Widget QComboBox
Este muestra sus elementos en una lista desplegable que se muestra cuando el usuario hace clic sobre él, podemos seleccionar un elemento de la lista, al hacerlo se lanza el evento currentTextChanged que nos indica que el texto seleccionado ha cambiado.
Agregamos elementos al QComboBox usando su método addItems(ítem_list) donde le pasamos la lista de elementos que deseamos mostrar, podemos agregar elementos uno a uno usando el método addItem(item), para seleccionar un elemento mediante programación contamos con setItemText(int, str) donde indicamos primero el índice del elemento que deseamos seleccionar, luego el texto a seleccionar.
cbx = QComboBox() # agregar lista de nombres de estilos disponibles cbx.addItems(QStyleFactory.keys()) # responder al evento cambio de texto cbx.currentTextChanged.connect(self.textChanged) # seleccionar el ultimo elemento cbx.setItemText(4, 'Fusion')
Widget QListWidget
Este control es bastante similar al anterior salvo que la lista siempre está visible, podemos decir que un QComboBox usa un QListWidget para mostrar su lista de elementos, manejamos el evento itemSelectionChanged para saber cuándo se ha seleccionado un nuevo elemento, si deseamos saber cuál es el elemento actualmente seleccionado usamos en método currentItem() que devuelve el objeto QListWidgetItem que representa dicho elemento, usamos el método QListWidgetItem.text() para obtener el texto mostrado.
# lista de elementos items = ['Ubuntu', 'Linux', 'Mac OS', 'Windows', 'Fedora', 'Chrome OS', 'Android', 'Windows Phone'] self.lv = QListWidget() self.lv.addItems(items) self.lv.itemSelectionChanged.connect(self.itemChanged) def itemChanged(self): item = QListWidgetItem(self.lv.currentItem()) print("Sistema seleccionado: ", item.text())
Widget QTableWidget
Este control nos permite presentar la información en formato tabular, en filas, columnas y celdas, para establecer los nombres de cabecera de las columnas usaremos el método setHorizontalHeaderLabels(['Nombre', 'Edad', 'Nacionalidad']) pasándole en orden cada uno de los nombres para las columnas.
Para agregar elementos a este control usamos su método setItem() indicándole primero, el índice de la fila a la que pertenece, segundo, el índice de la columna y por último el dato a mostrar.
table = QTableWidget(10, 3) table.setHorizontalHeaderLabels(['Nombre', 'Edad', 'Nacionalidad']) table_data = [ ("Alice", 15, "Panama"), ("Dana", 25, "Chile"), ("Fernada", 18, "Ecuador") ] # agregar cada uno de los elementos al QTableWidget for i, (name, age, city) in enumerate(table_data): table.setItem(i, 0, QTableWidgetItem(name)) table.setItem(i, 1, QTableWidgetItem(str(age))) table.setItem(i, 2, QTableWidgetItem(city))
Obtener Elemento Seleccionado de QTableWidget
Al igual que el control anterior manejamos en evento itemSelectionChanged que se produce cada vez que se selecciona un elemento, para nuestro ejemplo cambiamos en comportamiento del control en cuanto a la selecciona de elementos indicando que solo deseamos seleccionar filas, usando el método: setSelectionBehavior(QTableWidget.SelectRows), el comportamiento por defecto permite la selección de filas (SelectRows), columnas (SelectColumns) o celdas individualmente (SelectItems), usamos también setSelectionMode(QTableWidget.SingleSelection) para indicar que solo permitiremos la selección de un elemento a la vez, por defecto es posible seleccionar varios elementos.
# seleccionar solo filas self.table.setSelectionBehavior(QTableWidget.SelectRows) # usar seleccion simple, una fila a la vez self.table.setSelectionMode(QTableWidget.SingleSelection) # evento producido cuando cambia el elemento seleccionado self.table.itemSelectionChanged.connect(self.tableItemChanged)
Para obtener el elemento seleccionado usamos el método self.table.selectedItems() como solo seleccionamos filas, una a la vez, este método nos devuelve los elementos que componen la fila, si la seleccionar fuera la celda individual nos devolvería el valor de dicha celda, si la selección fuera una columna nos devolvería los datos de la columna.
def tableItemChanged(self): name, age, city = self.table.selectedItems() print("Data:", name.text(), age.text(), city.text())
Con esto cada vez que se selecciona una fila obtenemos: el nombre, la edad y el país al que pertenece cada persona.
GitHub: Controles Tipo Lista PyQT-5
Comentarios
Publicar un comentario