Un adelanto de una idea
Unos minutos jugando me han llevado por el camino de este adelanto (video acá por si no lo ven <):
¿Se convertirá en algo? ¡Quién sabe!
Unos minutos jugando me han llevado por el camino de este adelanto (video acá por si no lo ven <):
¿Se convertirá en algo? ¡Quién sabe!
Por eso refactoreé todas esas cosas que yo creo que un editor de texto debe tener en una linda biblioteca, para que la próxima vez que alguien deba reinventar la rueda, pueda usar los bonitos rayos y eje de Marave.
Entonces, aquí está Editor, la clase con el nombre más obvio posible! Es un widget de edición de texto para PyQt con features extra, que se puede usar como reemplazo de QTextEdit o QPlainTextEdit.
Por ahora, vive adentro del SVN de Marave pero tal vez algún día salga de ahí.
Éstos son los features:
Resaltado de sintaxis:
Y no "en teoría", como QTextEdit y demás! Editor puede resaltar un montón de lenguajes porque usa GNU source highlight via el Source Highlight Qt de Loreno Bettini.
Corrector ortográfico
Si instalás PyEnchant con los diccionarios correctos, hace corrección ortográfica online.
Widgets de Buscar y Buscar y Reemplazar
La clase Editor te da lindos widgets para buscar y buscar y reemplazar ya conectados con el widget del editor, para que lo agregues fácilmente a tu aplicación.
Métodos new/open/save/saveas:
No implementes abrir/guardar, etc! Eso es siempre el mismo código!
Ojalá le sirva a alguien más :-)
Realmente, Marave es como mucho un mes de programar part-time. Cómo puede eso humanamente ser U$S71355 o "1 año persona"?
¿Esta basura es lo mejor que tenemos para estimar costos? Si es así, la próxima vez que vean algo como "El programa X llevaría Y años y costaría Z dólares", recórtenlo por un factor de 10 o más.
Ésto es lo que costó desarrollar Marave:
Nada
Bueno, ésto es lo que hubiera costado si lo cobrara:
Estoy suponiendo unas 100 horas de mi tiempo. A mi precio de "ojalá me lo paguen", U$S 40/hora, son U$S 4000, que quiere decir que Ohloh le pifia por un 1600%.
Por otro lado, por tanto trabajo freelance no te voy a cobrar precio completo, lo más seguro es que te cobra algo como U$S 20/hora lo que quiere decir que Ohloh está un 3000% arriba.
En conclusión: si te gusta mi código (y lo podés ver por vos mismo), contratame, soy o increíblemente barato o increíblemente rápido.
Hacer un "fade in" de un widget
Setear una variable
Hacer un "fade in" de otro widget
Es importante hacerlo en ese orden y es importante que la aplicación siga respondiendo.
Acá está el código que usé (simplificado):
def fadein(thing, target=1., thendo=None): """ * thing is a QWidget * thing.proxy is a QGraphicsWidget * thendo is callable * target is the desired opacity """ thing.anim=QtCore.QPropertyAnimation(thing.proxy, "opacity") thing.anim.setDuration(200) thing.anim.setStartValue(thing.proxy.opacity()) thing.anim.setEndValue(target) thing.anim.start() thing.anim.finished.connect(thing.anim.deleteLater) if thendo: thing.anim.finished.connect(thendo)
Y se usa así:
¿No es lindo? Tener funciones como objetos de primera clase significa que puedo tomar later
como un closure, junto con widget2
y avar
que sólo necesitan estar definidas en el scope local, y la cadena de llamadas funciona ¡exactamente como quiero!
Sí, en muchos otros lenguajes se hace lo mismo, y en Javascript es un truco común... ¡pero PyQt es un wrapper de C++!
Me parece que este tipo de uso muestra el valor agregado que PyQt te da, no es solamente que con python evitás la compilación aburrida, o que tenés la increíble biblioteca estándar, sino que el lenguaje mismo te deja hacer cosas que no son prácticas en C++.
La única manera que se me ocurre de hacer esto en C++ es crear un slot que sea el equivalente de later
, y encadenarlo a la señal... lo que quiere decir que ese later
descartable se convierte en parte de la interface de la clase. (!?)
Habría que definir later
en algún otro lado del archivo, separado de su único uso (tal vez inine en el header).
Aún así, eso no es equivalente: avalue
podría ser algo no fácil de acceder cuando se ejecuta later
(por ejemplo, el timestamp del primer fadein), habría que buscar donde guardarlo para que later
lo encuentre, no se puede volver a hacer esto hasta después que se ejecute later
... se pone complicado.
A veces programar es como una cachetada... te das cuenta que cosas que usás sin pensar no son nada triviales.
Así que recuerda joven aprendiz: podés elegir las herramientas. Elegí con cuidado.