En este capítulo del tutorial de Python 3 con PyQt5 veremos como crear árboles de datos con el objeto Tree Widget. Este objeto nos permite crear estructuras de forma ordenada a través de columnas y filas con sus respectivos items.
Como ejemplo veremos como listar los elementos de un directorio, emulando al arbol de datos que podemos encontrar al abrir una carpeta, ordenados por las columnas Nombre, Fecha modificación, Tipo y Tamaño.
Crearemos un archivo ui con Designer llamado treewidget.ui
Crearemos un cuadro de diálogo que lo convertiremos en un contenedor (Lay Out in a Grid) y agregaremos un objeto Tree Widget al cual llamaremos directorio y tendrá cuatro columnas: Nombre | Fecha modificación | Tipo | Tamaño
Agregaremos un objeto Label con el texto "Buscar directorio:"
Agregaremos un objeto Line Edit con nombre ruta
Y por último agregaremos un objeto Push Button con nombre boton y el texto "Buscar"
treewidget.pyw
import sys, time from PyQt5.QtWidgets import QApplication, QDialog, QTreeWidgetItem from PyQt5 import uic from os import listdir, path, stat from mimetypes import MimeTypes class Dialogo(QDialog): def __init__(self): QDialog.__init__(self) uic.loadUi("treewidget.ui", self) self.boton.clicked.connect(self.getDir) def getDir(self): #Eliminar todas las filas de la búsqueda anterior self.directorio.clear() #Ruta indicada por el usuario dir = self.ruta.text() #Si es un directorio if path.isdir(dir): #Recorrer sus elementos for element in listdir(dir): name = element pathinfo = dir + "\\" + name informacion = stat(pathinfo) #Si es un directorio if path.isdir(pathinfo): type = "Carpeta de archivos" size = "" else: mime = MimeTypes() type = mime.guess_type(pathinfo)[0] size = str(informacion.st_size) + " bytes" #Fecha de modificación date = str(time.ctime(informacion.st_mtime)) #Crear un array para crear la fila con los items row = [name, date, type, size] #Insertar la fila self.directorio.insertTopLevelItems(0, [QTreeWidgetItem(self.directorio, row)]) app = QApplication(sys.argv) dialogo = Dialogo() dialogo.show() app.exec_()
1 comentario:
Buenas, ante todo decir que es muy buen aporte, muy bien explicado. Ahora tengo una duda, en el siguiente post se ve claro como acceder al contenido de una columna, si por ejemplo yo ahora quisiera acceder a una fila especifica, como lo se realizaria? No hago nada mas que mirar la documentación y no lo encuentro. Es decir, que me imprima el contenido de la fila 3 y de la columna 2 por ejemplo.
Gracias de antemano.
Un saludo
Publicar un comentario