1
2
3
4
5
6
7
8
9 import ui
10 import os
11 import sys
12 import glob
13
14 from PyQt4 import QtGui, QtCore
15
16 import syntax
17 import pilas
18
19
20 MENSAJE_PRESENTACION = u"""Bienvenido al cargador de ejemplos.
21
22 Selecciona un ejemplo usando el panel de
23 la izquierda y luego verás el código acá.
24 """
25
26
28
44
46 self.ejecutar.connect(self.ejecutar, QtCore.SIGNAL("clicked()"), self.cuando_pulsa_boton_ejecutar)
47 self.fuente.connect(self.fuente, QtCore.SIGNAL("clicked()"), self.cuando_pulsa_boton_fuente)
48 self.guardar.connect(self.guardar, QtCore.SIGNAL("clicked()"), self.cuando_pulsa_boton_guardar)
49 self.arbol.connect(self.arbol, QtCore.SIGNAL("itemSelectionChanged()"), self.cuando_cambia_seleccion)
50 self.arbol.connect(self.arbol, QtCore.SIGNAL("itemActivated(QListWidgetItem *)"), self.cuando_pulsa_boton_ejecutar)
51
53 "Oculta la barra de progreso y habilita todos los controles."
54
55 widgets = [self.progreso, self.ejecutar, self.guardar, self.arbol, self.fuente, self.codigo, self.imagen]
56
57 self.progreso.setVisible(not esta_habilitado)
58
59 for x in widgets:
60 x.setEnabled(esta_habilitado)
61
63 if event.key() == QtCore.Qt.Key_Return and \
64 self.arbol.hasFocus() and \
65 self.arbol.currentItem().childCount() == 0:
66 self.cuando_pulsa_boton_ejecutar()
67
68 return QtGui.QMainWindow.keyPressEvent(self, event)
69
71 self.ejemplos = {}
72 self.arbol.setColumnCount(1)
73 self.arbol.setHeaderLabels(["Nombre"])
74
75 directorios = glob.glob(self.example_dir + '/*')
76
77 for directorio in directorios:
78 raiz = QtGui.QTreeWidgetItem([os.path.basename(directorio), ""])
79 self.arbol.addTopLevelItem(raiz)
80
81 archivos = glob.glob(directorio + '/*.py')
82 archivos.sort()
83
84 for archivo in archivos:
85 nombre_legible = os.path.basename(archivo).replace(".py", "")
86 item = QtGui.QTreeWidgetItem([nombre_legible, archivo])
87 raiz.addChild(item)
88 self.ejemplos[nombre_legible] = archivo
89
93
95 font = self.codigo.font()
96 font, ok = QtGui.QFontDialog.getFont(font)
97
98 if ok:
99 self.codigo.setFont(font)
100
102 nombre = self._obtener_item_actual()
103 path = unicode(QtGui.QFileDialog.getSaveFileName(self.main, 'Guardar ejemplo', nombre, "py (*.py)"))
104 if path:
105 contenido = self._obtener_codigo_del_ejemplo(nombre)
106
107 archivo = open(path, "wt")
108 archivo.write(contenido)
109 archivo.close()
110
117
119 nombres = ruta.split('/')
120 categoria = nombres[-2]
121 nombre = nombres[-1].replace('.py', '')
122
123 items = self.arbol.findItems(nombre, QtCore.Qt.MatchRecursive)
124
125 if items:
126 return items[0]
127
129 escena = QtGui.QGraphicsScene()
130 self.imagen.setScene(escena)
131 pixmap = QtGui.QGraphicsPixmapItem(QtGui.QPixmap(ruta.replace('.py', '.png')))
132
133 escena.addItem(pixmap)
134
138
142
145
147 archivo = open(nombre)
148 contenido = archivo.read()
149 archivo.close()
150 return contenido
151
153 return self.arbol.currentItem().text(1)
154
164
166 "Vuelve a permitir que se usen todos los botone de la interfaz."
167 salida = str(self.process.readAll())
168
169 if estado:
170 QtGui.QMessageBox.critical(self.main, "Error al iniciar ejemplo", "Error: \n" + salida)
171
172 self._definir_estado_habilitado(True)
173 self.arbol.setFocus()
174
175 -def main(parent=None):
176 dialog = QtGui.QDialog(parent)
177 dialog.setWindowFlags(dialog.windowFlags() | QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowMinMaxButtonsHint)
178 ui = VentanaEjemplos()
179 ui.setupUi(dialog)
180 dialog.exec_()
181
182 if __name__ == "__main__":
183 main()
184