1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ListView.py
# Cristian García <cristian99garcia@gmail.com>
# Ignacio Rodríguez <nachoel01@gmail.com>
from gi.repository import Gtk
import Globales as G
import os
class ListView(Gtk.TreeView):
def __init__(self):
super(ListView, self).__init__()
self.modelo = Gtk.TreeStore(str, str)
self.set_model(self.modelo)
self.__construir_columnas()
self.set_path("/")
self.connect("row-expanded", self.__expandir)
self.connect("row-collapsed", self.__colapsar)
self.show_all()
def __construir_columnas(self):
render1 = Gtk.CellRendererText()
render2 = Gtk.CellRendererText()
columna1 = Gtk.TreeViewColumn('Archivo', render1, text=0)
columna2 = Gtk.TreeViewColumn('Direccion', render2, text=1)
columna2.set_property('visible', False)
self.append_column(columna1)
self.append_column(columna2)
def set_path(self, path):
self.modelo.clear()
dir = os.path.basename(path)
iter = self.modelo.append(self.modelo.get_iter_first(),
[dir,
path])
self.modelo.append(iter, ["Vacio",
"Directorio"])
def __expandir(self, widget, iter, path):
direccion = self.modelo.get_value(iter, 1)
principal = self.modelo.iter_children(iter)
try:
archivos = os.listdir(direccion)
except OSError:
valor = self.modelo.get_value(principal, 0)
self.modelo.append(iter, ["Acceso Denegado",
"Acceso Denegado"])
if valor == "Vacio" or valor == "Acceso Denegado":
self.modelo.remove(principal)
return
archivos.sort()
if len(archivos) == 0:
return
ultimos = []
directorios_ultimos = []
for archivo in archivos:
nuevo_path = os.path.join(direccion, archivo)
if os.path.isdir(nuevo_path):
if archivo.startswith("."):
directorios_ultimos.append([archivo,
nuevo_path])
else:
iter_nuevo = self.modelo.append(iter, [archivo,
nuevo_path])
self.modelo.append(iter_nuevo, ["Vacio",
"Directorio"])
else:
ultimos.append(archivo)
for directorio in directorios_ultimos:
iter_nuevo = self.modelo.append(iter, [directorio[0],
directorio[1]])
self.modelo.append(iter_nuevo, ["Vacio",
"Directorio"])
for archivo in ultimos:
nuevo_path = os.path.join(direccion, archivo)
self.modelo.append(iter, [archivo,
nuevo_path])
valor = self.modelo.get_value(principal, 0)
if valor == "Vacio" or valor == "Acceso Denegado":
self.modelo.remove(principal)
def __colapsar(self, treeview, iter, path):
while self.modelo.iter_n_children(iter):
self.modelo.remove(self.modelo.iter_children(iter))
self.modelo.append(iter, ["Vacio",
"Directorio"])
if __name__ == "__main__":
Scroll = Gtk.ScrolledWindow()
Scroll.add_with_viewport(ListView())
Scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
Ventana = Gtk.Window()
Ventana.connect("delete-event", lambda x, i: exit())
Ventana.add(Scroll)
Ventana.show_all()
Gtk.main()
|