Recientemente he visto este widget en Gedit:
Aparece cuando presiona Ctrl + F
. Lo que me interesa es cómo obtener el efecto deslizante. Cualquier sugerencia será apreciada.
Recientemente he visto este widget en Gedit:
Aparece cuando presiona Ctrl + F
. Lo que me interesa es cómo obtener el efecto deslizante. Cualquier sugerencia será apreciada.
Respuestas:
He logrado un efecto de desvanecimiento usando GTK y CSS puro .
Solo funciona en GTK 3.6 y no estoy seguro de si sería posible un efecto deslizante de entrada / salida, sin embargo, si lo desea, puede ver la fuente en launchpad.net/uberwriter
Funciona a través de un cambio de estado y luego transiciones GTK ... Tal vez con altura // ancho también sería posible.
Debido a que la gente obviamente me rechazó, aquí hay otra explicación más detallada:
Este es el CSS que he usado:
GtkLabel:insensitive {
color: rgba(255,255,255,0);
transition: 500ms ease-in-out;
}
Si usa esto como CSS (espero que me permita hacer referencia a una explicación de mí mismo, cómo hacerlo: http://wolfvollprecht.de/blog/gtk-python-and-css-are-an-awesome-combo/ ) entonces puedes usar Gtk.StateFlags
para desvanecer la etiqueta.
p.ej:
label.set_state_flags(Gtk.StateFlags.INSENSITIVE, True)
Luego obtienes una transición a cero opacidad.
Sin embargo, como he notado, no hay muchas opciones para influir en la ubicación / ancho con CSS, así que supongo que está limitado a colores / opacidad, etc.
Disfrutar.
PD: Tenga en cuenta que esto solo funciona en Gtk 3.6, desde Ubuntu 12.10
GtkRevealer
, que puede hacer ambas cosas; ver mi respuesta .
Dicha animación no se puede lograr en GTK + puro. No hay mecanismos que lo procesen.
He echado un vistazo rápido al código fuente de gedit, está claro que procesan esta animación por su cuenta. No he examinado los detalles, ya que el código relacionado con las animaciones está bastante expandido, pero he notado que incorporan características de dibujo de Cairo para el widget de búsqueda animada. Lo más probable es que el widget se anime moviendo su posición cuadro por cuadro y redibujándolo en un lugar diferente en la superposición que se usa en un área de visualización de texto único.
Esa parece ser la solución más simple. (El código de gedit parece estar preparado para muchas animaciones que comparten la misma base de código, por lo que puede ser una exageración usar su enfoque exacto en una aplicación simple).
Para reproducir este efecto, deberá:
No puedo encontrar ninguna solución más fácil. Sin embargo, teniendo en cuenta el hecho de que los desarrolladores de gedit sí conocen GTK + como probablemente muy poco, puede que no haya un truco más simple para lograr tal efecto.
Puede usar una combinación entre Gtk.fixed (), GObject.timeout_add y la función move, aquí hay un ejemplo en python:
#! / usr / bin / python * desde gi.repository import Gtk, GObject clase TestWindow (Gtk.Window): def animateImage (self): GObject.timeout_add (150, self.slideImage) def slideImage (self): self.positionX + = 50; if (self.positionX> 800): self.fixedWidget.move (self.logo, self.positionX, 200) volver verdadero más: falso retorno def __init __ (self): Gtk.Window .__ init __ (self, title = 'Registro') self.positionX = 500 self.fixedWidget = Gtk.Fixed () self.fixedWidget.set_size_request (1920,1080) self.fixedWidget.show () self.logo = Gtk.Image.new_from_file ('picture.png') self.logo.show () self.fixedWidget.put (self.logo, self.positionX, 200) self.button1 = Gtk.Button ('¡Haz clic para deslizar la imagen!') self.button1.show () self.button1.connect ('clic', self.animateImage) self.button1.set_size_request (75,30) self.fixedWidget.put (self.button1,750,750) self.add (self.fixedWidget) testWindow = TestWindow () testWindow.set_size_request (1920,1080) testWindow.set_name ('testWindow') testWindow.show () Gtk.main ()
Hoy en día, hay una respuesta real a esta pregunta. Como originalmente se le preguntó y respondió, el código para revelar un widget de libgd
, que supongo es lo que GEdit estaba usando en ese momento, se ha incorporado a GTK + como GtkRevealer
:
https://developer.gnome.org/gtk3/stable/GtkRevealer.html
GtkRevealer
admite varias formas de transición, incluidas las direcciones cardinales de deslizamiento y un desvanecimiento en la opacidad.
Por lo tanto, en estos días, es tan simple como añadir el widget que desea transición a una GtkRevealer
y el uso de sus :transition-(type|duration)
y :reveal-child
propiedades.