Probablemente sean los plasmoids de las novedades más llamativas de KDE4 con respecto a KDE3 (ahora es cuando se oye rechinar los dientes de algún programador).
Los plasmoid son a KDE4 lo que los widgets de superKaramba eran a KDE3, pero con algunas bastantes mejoras, la mas importante sin duda: lo que antes era un escritorio con algunos gadgets visuales ha pasado a convertirse todo en un conjunto de gadgets. Tanto es así que casi podriamos decir que hoy por hoy el escritorio y sus componentes son todo plasmoides, de tal manera que lo que tradicionalmente permanecía “anclados” a la barra de tareas se pueden instalar en el escritorio y viceversa. En KDE4 es posible instalar la bandeja del sistema en el escritorio ó duplicarla en otro panel, podemos sacar el reloj de la barra de tareas y escalarlo en el escritorio, mover la calculadora del escritorio al panel, etc, etc. Hasta el propio escritorio no deja de ser un gran widget contenedor de widgets (¿habeis probado de hacer zoom out al escritorio? no me preguntes para que sirve esto…)

Zoom out sobre el escritorioZoom out sobre el escritorio

Resumiendo, el escritorio KDE son un conjunto de módulos más o menos independientes unos de otros y comunicados entre ellos via DBUS (reemplazo de DCOP).

La gran ventaja de esta modularización de KDE es la increible facilidad con que el entorno gráfico de trabajo se puede personalizar, manipular, hackear, extender, recortar, en definitiva: con muy poco esfuerzo podemos hacer con el escritorio lo que nos venga en gana hasta dejarlo a nuestro antojo-necesidad. Si a esto se le suma la gran accesibilidad proporcionada por lenguajes de programación muy populares (actualmente plasma soporta hasta widgets escritos en Javascript) pues tenemos el caldo de cultivo ideal para convertir a KDE en un gran escritorio. Basta echar un vistazo a la sección Plasmoid de Kde-look.org para ver como en los pocos meses que lleva KDE4 publicado se ha disparado la publicación de gadgets (teniendo en cuenta la fría acogida que tuvieron las primeras versiones de KDE4, hace un año, estamos hablando de pocos meses). Hay plasmoids para la tarea más insospechada, algunos incluso útiles :)

mini temperatura

Después de esta increiblemente larga excusa, ya puedo colgar mi mini-plasmoid MiniTemp, un plasmoid escrito en Python que conecta con meteoclimatic.com para coger la temperatura que hace en Cartagena y mostrarla en la barra de tareas. Es una chorrada a la que ni le he puesto interfaz de configuración (ni falta le hace), pero que sirve para demostrar los sumamente facil que resulta hacerse uno a medida con 4 líneas de código.

Para instalarlo:

  • Descarga miniTemp.zip (wget http://www.trebol-a.com/publicar/miniTemp.zip -O ~/miniTemp.zip)
  • Descomprimelo en una carpeta ( unzip ~/miniTemp.zip )
  • Visita meteoclimatic.com y obten el código de la estación meteorológica más cerca a tu casa (aparece entre parentesis detrás del nombre de la estación meteorológica)
  • Edita el archivo miniTemp/contents/code/main.py (vi ~/miniTemp/contents/code/main.py)
  • Cambia el valor de self.codeEstacion en la linea 19 por el tuyo propio (actualmente aparece : self.codeEstacion=”ESMUR3000000030204A” )
  • Prueba que todo funciona correctamente (cd ~; plasmoidviewer miniTemp )
  • Recomprime el contenido de la carpeta en otro zip (cd ~/miniTemp ; zip -r ../miMiniTemp.zip)
  • Instalalo ( plasmapkg -i ~/miMiniTemp )
  • En la barra de tareas selecciona “Añadir elementos gráficos” y selecciona miniTemperatura de la lista de elementos

plasmoidviewer miniTempplasmoidviewer miniTemp

El contenido de main.py es:
# -*- coding: utf-8 -*-
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyKDE4.plasma import Plasma
from PyKDE4 import plasmascript
import urllib
from xml.dom import minidom
class objeto(plasmascript.Applet):
def __init__(self,parent,args=None):
plasmascript.Applet.__init__(self,parent)
def init(self):
#print "Iniciando...."
#Esta es el codigo de una de las
#dos estaciones meteorológicas de Cartagena
#puedes obtener tu código mas
#cercano en http://www.meteoclimatic.com
self.codeEstacion="ESMUR3000000030204A"
cadenaTemperatura = self.cogerDatos()
#El objeto no tiene interfaz
self.setHasConfigurationInterface(False)
#Temporizador, consulta nuevos datos cada 15 minutos
self.temporizador = QTimer()
self.connect(self.temporizador,SIGNAL("timeout()"),self.cogerDatos)
#milisegundos, segundos, minutos , cada 15 minutos
self.temporizador.start(1000 * 60 * 15)
def paintInterface(self, painter, option, rect):
painter.save()
textColor = Plasma.Theme.defaultTheme().color(Plasma.Theme.TextColor)
bgColor = Plasma.Theme.defaultTheme().color(Plasma.Theme.BackgroundColor)
textFont = Plasma.Theme.defaultTheme().font(Plasma.Theme.DefaultFont)
#el tamaño de la fuente del reloj en la barra de tareas
textFont.setPointSize( rect.height() / 1.7 )
#en negrita
textFont.setBold(True)
painter.setFont(textFont)
painter.setPen(textColor)
painter.drawText( rect, Qt.AlignVCenter | Qt.AlignHCenter, self.cadenaTemperatura )
painter.restore()
def cogerDatos(self):
#print "Conectando .... "
urlCompleta="http://meteoclimatic.com/feed/xml/" + self.codeEstacion
documento = minidom.parse(urllib.urlopen(urlCompleta))
elemento = documento.getElementsByTagName("stationdata")
temperaturaActual = str( elemento[0].childNodes[1].childNodes[3].lastChild.data )
self.cadenaTemperatura = temperaturaActual + u'ºC'
self.update()
def CreateApplet(parent):
return objeto(parent)