GTK y Python: Cambiar el estilo de una GTKLabel

Lleva siendo así prácticamente desde que implementé la GtkHeaderBar en Pimagizer, pero como habéis podido ver, recientemente uso el tema Arc, que implica tener un fondo oscuro en las barras de menús y herramientas. Y el problema surge ahí, en que los botones que tan bonitos se veían con el tema por defecto de GTK, pero cambia con un tema oscuro:

A la derecha botones con imagen en un tema GTK claro, a la derecha lo mismo pero con un tema oscuro
Claramente la diferencia está ahí…

La solución más eficaz pasa por convertir ese botón en uno normal y corriente, sin imágenes de ningún tipo, simplemente utilizando texto, y en concreto GTKLabel. Si estáis utilizando Glade o algún sistema gráfico parecido, podéis saltar a la siguiente sección.

Crear los elementos básicos

Daremos por hecho que ya tienes una ventanita corriendo con GTK, ya que el objetivo del artículo no es enseñar a utilizar los elementos de GTK, sino utilizar uno muy concreto. Aquí repasamos cómo se crea la etiqueta dentro del botón.

buttonPx = Gtk.ToggleButton()
labelPx = Gtk.Label("Px")  # Aquí va nuestro texto
buttonPx.add(labelPx)
buttonPx.show()
labelPx.show()

Un código bastante sencillito. Creamos un GtkToggleButton (hereda de GTKButton) y un objeto GTKLabel con el texto Px. Le decimos al botón que utilice la etiqueta que acabamos de crear y mostramos ambos objetos. Veamos cómo quedaría:

Los botones de la HeaderBar con etiquetas de texto pequeñas
No se parece demasiado al resultado que queremos conseguir…

Como podemos ver en la imagen, se consigue el objetivo de no usar una imagen para mostrar en los botones, pero son muy distintos de lo que teníamos antes: dos botones con el texto bien visible.

Decidiendo el estilo de la GTKLabel

Afortunadamente GTK ofrece bastantes herramientas para poder personalizar los aspectos que necesitemos, como este concretamente. Lo que estamos buscando exactamente es esto: Text Attribute Markup, que inicialmente fue desarrollada por Pango. Formalmente lo conocemos como Pango Text Attribute Markup Language. No os preocupéis demasiado: es muy parecido a HTML, así que aprender la sintaxis no será complejo.

Básicamente, la sintaxis se basa en XML al igual que HTML. Tenemos el soporte de etiquetas algo más reducido, pero las clásicas <b>, <i> o <u> las tenemos. Añade alguna más como <big>, <small>, <sup> y <sub>, permitiendo hacer cosas más complejas sin meterse con CSS. Lo interesante con las opciones viene con la etiqueta <span>, que permite una serie de opciones muy interesante, como distintas tipografías, colores o tamaños. De la que nos ocupa ahora son los tamaños, ya que los colores vendrán predefinidos por el tema GTK del usuario.

Para decidir el tamaño de nuestra etiqueta podemos utilizar medidas absolutas (píxeles, puntos, etc…) o relativas. Lo recomendable es utilizar medidas relativas, porque se adaptarán a la resolución que esté usando el usuario. Las medidas absolutas las veremos muy bien en nuestro ordenador, pero cambiará drásticamente cuando cambiemos a otro con una resolución más distinta.

Para la etiqueta <span> disponemos del atributo size=”” o font_size=””. En la documentación tenéis informacion sobre otros muchos atributos, y modos de uso, pero nos centaremos en los tamaños relativos. Disponemos de una escala de 7 tamaños, ordenadas de menor a mayor: ‘xx-small‘, ‘x-small‘, ‘small‘, ‘medium‘, ‘large‘, ‘x-large‘, ‘xx-large‘. La que aplicaremos en nuestra aplicación será la más grande, pues obtendremos el resultado similar al que conseguíamos con las imágenes.

<span size="xx-large"><b>Px</b></span>

También le ponemos la etiqueta <b> para darle más grosor a la fuente. Ahora sólo nos queda incorporarlo al código

Utilizar marcado Pango en GTKLabel

Al código de nuestra primera sección le debemos de dar unos breves retoques para poder poner lo que necesitamos. Y es que si rellenamos la etiqueta tal cual lo tenemos en el cuadro de texto anterior el usuario verá las etiquetas, que es algo que no deseamos. GTKLabel tiene un atributo que indica si se está utilizando marcado o no.

buttonPx = Gtk.ToggleButton()
labelPx = Gtk.Label("<span size="xx-large"><b>Px</b></span>")
buttonPx.add(labelPx)
buttonPx.show()
labelPx.set_use_markup(True)  # Muy Importante!!
labelPx.show()

Como vemos, la penúltima línea es la que nos dejará hacer la magia. Le estamos diciendo que aplique el marcado a esa etiqueta. Y ya, al ejecutar de nuevo nuestra aplicación tendremos el resultado que buscábamos:

Las GTKLabel de la aplicación ahora se ven adecuadamente
¡Ahora sí!

Siempre podéis consultar el resultado en directo en la versión 0.4.5 de Pimagizer.

Un saludo!

Véase: Documentación GTK | Pimagizer

0 0

Pimagizer, por fin, para Arch Linux

Tuvo hace algunos meses una escasa presencia en el AUR, el repositorio de Usuarios de Arch, pero debido a cambios que hicieron y a que no tuve tiempo en su momento, lo dejé pasar un poco. Ahora ha renacido y está disponible la aplicación Pimagizer lista para instalar en Arch y derivados con un sólo comando:

sudo yaourt -S pimagizer

Lo he podido probar sólo en mi ordenador. Si encontráis errores, no dudéis en reportarlos.

Y ya aprovecho y si no la conocéis, pues la doy un poco de bombo

Captura de Pimagizer en AntergosPimagizer nació para hacer la vida fácil a todos. Nació para muchas personas, que como yo trabaja con la web y necesita subir imágenes cambiando el tamaño de las fotos para no sobrecargar con muchos datos el tráfico. Porque muchas veces si se ve bien, no es necesario subir una imagen de 5Mb cuando los usuarios pueden ver mermado su rendimiento.

Nació prácticamente con Gnome 3 y ha ido evolucionando con él. Soy consciente de que necesita muchas mejoras, pero el código está en launchpad, y no es nada complicado colaborar. Os animo, aunque sea, a traducirla 😉

Saludos!

 

3 1

Pimagizer 0.4

Ya hace casi dos años que empezé este proyecto. Todo empezó por suplir una necesidad de una forma rápida. Necesitaba cambiar el tamaño a las imágenes de forma “rápida”. Se planteaban varias alternativas, como usar comandos en la consola o Gimp. Me gusta evitar el uso de la terminal en la medida de lo posible, y Gimp creo que tardaba bastante en iniciar en mi ordenador. Me picaba la curiosidad eso decidí escribir una aplicación, cosa que ya había hecho con guallet, pero ahora empezaba a entender más de esto, y Gnome 3.0 empezaba a entrar en escena.

Pimagizer 0.4.1 CTBAAprender a programar y hacer una aplicación muy sencilla e intuitiva eran dos de mis objetivos principales. Creo que, al menos a largo plazo, los he conseguido. Si bien es cierto que la aplicación es todavía muy mejorable, cumple su función.

Últimamente, Gnome ha añadido nuevos widgets y el diseño “oficial” ha cambiado bastante, y he intentado adaptarme en la medida de lo posible. En esta última versión, la 0.4, he hecho uso de la HeaderBar, que a mí me ha parecido muy interesante. El problema es que es muy nueva y se introdujo en gtk 3.10, disponible en muy pocos sitios.

Para esta nueva versión también me he querido asegurar de que, en la medida de lo posible, versiones algo más antiguas puedan hacer funcionar el programa, aún no teniendo esta característica de la HeaderBar. He implementado en su lugar una más rudimentaria, hecha a partir de GtkBox(es).

pimagizeronKDE
La vista de Pimagizer en el entorno KDE no se ve demasiado favorecida…

También he ampliado mi ámbito de distribuciones a Arch y derivados, para los cuales he habilitado el PKGBUILD de pimagizer en AUR. Con esto quiero decir que si usas algún derivado de Arch (como Manjaro por ejemplo) puedes instalártelo mediante “yaourt -S pimagizer“. A esta forma se unen las ya comunes formas en paquete .deb y .rpm.

Nada más que decir, sólo indicar que las instrucciones de instalación las tenéis en la página del proyecto y por si acaso os dejo unos cuantos enlaces de descarga: Downloads

Saludos 😉

0 0

Pimagizer 0.3

Hace algo de tiempo lanzé la versión 0.2 de pimagizer, cuya entrada está en los archivos del ya traspasado Usemos Linux. En esa versión añadía correcciones a algunos errores que había en versiones anteriores, y facilitaba el permitir que aquellas personas que quisiesen sobreescribir las imágenes, pudieran.

Pimagizer antes de cargar una vista previa
Pimagizer antes de cargar una vista previa

Esta versión 0.3 permite, entre otras muchas cosas, abrir un conjunto de imágenes y hacer acciones sobre dicho conjunto. Permite ajustar el tamaño en píxeles de todas las imágenes a la vez si estas son de la misma resolución, pero si son de distinta resolución, te deja ajustar el tamaño en porcentaje.

Además, también te permite cargar una vista previa con las imágenes que hayas seleccionado, si estas son de la misma resolución, claro.

Captura de pantalla de Pimagizer
Captura de pantalla de Pimagizer

En la última revisión, la 0.3.1, he corregido algunos errores que existían con respecto a algunas cadenas que aparecían sin traducir en algunas zonas. (gracias a ~r0di0n por el aviso).

Descargas

Esta versión ya está disponible para descargar en su página “oficial”. Aún así, os dejo un enlace a los paquetes que podéis usar para instalar.

DEB RPM source
0.3.1 .deb(lp.net) n/d .tar.gz
0.3 .deb | .deb(lp.net) | Otros .rpm | Otros .tar.gz

Por supuesto, también podéis utilizar el PPA que hay en Launchpad disponible a tal efecto:

sudo add-apt-repository ppa:vfrico/stable
sudo apt-get update
sudo apt-get install pimagizer

Y si lo utilizáis, ¡no dudéis en pasaros por Launchpad para reportar errores o traducirlo a los idiomas que conocéis!

0 0

Nota mental sobre bzr, builddeb y quilt

Nota mental:

«Si tienes un parche en tu rama de bzr que da problemas al ejecutar bzr-builddeb, entonces primero debes hacer “quilt pop -a”, hacer un commit (bzr commit -m “Maldito quilt”) y ya después ejecutar “bzr builddeb”.»   Lugar de la masacre

PD: En breve, Pimagizer 0.3 con soporte para múltiples imágemes.

0 0

Pimagizer 0.1.12 lanzado

Ayer mismo conseguí hacer una versión que iniciara sin ningún tipo de problemas desde el lanzador de aplicaciones Gnome-shell (o desde cualquier otro 🙂 ), así que subí la versión de prueba a launchpad, al repositorio “inestable”. Ya funciona bien, por lo que lo acabo de dejar para que se suba al repo adecuado. Esto quiere decir que para instalarlo necesitaremos ejecutar “sólo” estas dos líneas:

$ sudo add-apt-repository ppa:vfrico/stable && sudo apt-get update
$ sudo apt-get install pimagizer

Y ahora os dejo un vídeo, demostrando lo que hace:


0 0

Nuevo desarrollo: Pimagizer

Este desarrollo surge, al igual que Guallet, como una necesidad. Como ya estáis viendo, llevo algo de tiempo aficcionado a esto de los fondos de pantalla. Pero esto tiene un pequeño problema: las diferentes resoluciones que los ordenadores de hoy en día tienen, así como su proporción. Abrir cada imagen con El Gimp es una buena idea, pero no es precisamente un programa ligero, y abrirlo sólo para eso… También no conozco ningún “método” que te permita grabar las imágenes con un nombre de archivo determinado.

Estuve buscando un programa que fuese ligero y abriese rápido, pero a simple vista no vi nada. Me apetecía meterme en un desarrollo, y lo vi claro: un programa para redimensionar imágenes.Python image resizer: Pimagizer. Al principio iba a usar Imagemagick, pero no siempre un ordenador lo trae instalado, y para que un usuario no se “decepcione” al instalarlo, decidí usar finalmente PIL (Python Image Resizer). Como librería gráfica usa GTK+3, con PyGi (PyGTK vale sólo para 2.x).

Lo que todavía me falta por pulir un poco es el tema de mostrar la proporción que tiene. Todavía se ve el decimal que resulta de hacer el cálculo proporcional de esta imagen.

El programa está íntegramente alojado en Launchpad. Ya avisaré cuando haya nuevas versiones con novedades.

0 0