Este capítulo del tutorial de Python 3 más PyQt5 es la continuación del capítulo anterior, en el cual vimos como agregar filas al un objeto Tree Widget, concretamente listando directorios.
En este capítulo agregaremos un nuevo método a la clase llamado getElement, que nos permitirá navegar a un directorio o abrir un archivo con su programa por defecto, todo ello tras hacer doble click (itemDoubleClicked Signal) sobre el elemento.
Más información sobre la clase QTreeWidget: http://pyqt.sourceforge.net/Docs/PyQt4/qtreewidget.html
treewidget.pyw
import sys, time from PyQt5.QtWidgets import QApplication, QDialog, QTreeWidgetItem from PyQt5 import uic from os import listdir, path, stat, startfile from mimetypes import MimeTypes class Dialogo(QDialog): def __init__(self): QDialog.__init__(self) uic.loadUi("treewidget.ui", self) self.boton.clicked.connect(self.getDir) self.directorio.itemDoubleClicked.connect(self.openElement) 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)]) def openElement(self): #Obtener el item seleccionado por el usuario item = self.directorio.currentItem() #Crear la ruta accediendo al nombre del elemento (carpeta o archivo) elemento = self.ruta.text() + "\\" + item.text(0) #Si es un directorio navegar a su interior if path.isdir(elemento): self.ruta.setText(elemento) self.getDir() else: #Si es un archivo abrirlo con el programa que lo abre por defecto en Windows startfile(elemento) app = QApplication(sys.argv) dialogo = Dialogo() dialogo.show() app.exec_()
No hay comentarios:
Publicar un comentario