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