J'ai récemment vu ce widget dans Gedit:
Il apparaît lorsque vous appuyez sur Ctrl + F
. Ce qui m'intéresse, c'est comment obtenir l'effet glissant. N'hésitez pas à nous faire part de vos suggestions.
J'ai obtenu un effet de fondu en utilisant pur GTK et CSS.
Cela ne fonctionne que dans GTK 3.6 et je ne suis pas sûr si un effet de glisser dans/dehors serait possible, cependant, si vous le souhaitez, vous pouvez consulter le code source à launchpad.net/uberwriter
Cela fonctionne avec un changement d'état, puis avec GTK Transitions ... Peut-être avec une hauteur/largeur qui serait possible aussi.
Comme il est évident que les gens me refusent, voici une autre explication plus détaillée:
C'est le CSS que j'ai utilisé:
GtkLabel:insensitive {
color: rgba(255,255,255,0);
transition: 500ms ease-in-out;
}
Si vous utilisez ceci comme CSS (j'espère avoir le droit de faire référence à une explication de moi-même, comment y arriver: http://wolfvollprecht.de/blog/gtk-python-and-css-are-an-awesome -combo / ) vous pouvez alors utiliser Gtk.StateFlags
pour supprimer l’étiquette.
par exemple.:
label.set_state_flags(Gtk.StateFlags.INSENSITIVE, True)
Ensuite, vous obtenez une transition vers une opacité zéro.
Cependant, comme je l'ai remarqué, il n'y a pas beaucoup d'options pour influencer le placement/la largeur avec CSS, donc je suppose que c'est limité aux couleurs/opacité, etc.
Prendre plaisir.
PS: Notez que cela seulement fonctionne dans Gtk 3.6, car Ubuntu 12.10
Une telle animation n'est pas réalisable en GTK + pur. Il n'y a pas de mécanismes pour le traiter.
J'ai jeté un coup d'œil sur le code source de gedit, il est clair qu'ils traitent cette animation eux-mêmes. Je n'ai pas cherché dans les détails, car le code relatif aux animations est assez développé, mais j'ai noté qu'ils incorporaient des fonctionnalités de dessin du Caire pour le widget de recherche animée. Le widget est probablement animé en déplaçant sa position image par image et en le redessinant à un emplacement différent de la superposition utilisé dans une seule zone d'affichage de texte.
Cela semble être la solution la plus simple. (Le code de gedit semble préparé à de nombreuses animations partageant la même base de code, il peut donc être excessif d'utiliser son approche exacte dans une application simple.)
Pour reproduire cet effet, vous devrez:
Je ne peux pas trouver de solution plus facile. Cependant, compte tenu du fait que les développeurs de gedit connaissent très peu GTK +, il n’ya peut-être pas de solution plus simple pour obtenir cet effet.
Vous pouvez utiliser une combinaison entre Gtk.fixed (), GObject.timeout_add et la fonction move, voici un exemple dans python:
#!/usr/bin/python * de gi.repository import Gtk, GObject , classe TestWindow (Gtk.Window): def animateImage (self): GObject.timeout_add (150, self.slideImage) def slideImage (self): self.positionX + = 50; [50 .____.] if (self.positionX> 800): self.fixedWidget.move (self.logo, self.positionX, 200) renvoie True sinon: return False def __init __ (self): Gtk.Window .__ init __ (self, title = 'Registration') 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 ('Cliquez sur moi pour faire glisser l'image!') Self.button1.show () Self.button1.connect ('clicked', 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 ()
De nos jours, il y a une vraie réponse à cette question. Depuis qu'il a été demandé et répondu à l'origine, le code permettant de révéler un widget de libgd
- que je suppose comme étant ce que GEdit utilisait à cette époque - a été intégré dans GTK + en tant que GtkRevealer
:
https://developer.gnome.org/gtk3/stable/GtkRevealer.html
GtkRevealer
prend en charge diverses formes de transition, notamment les directions cardinales de la diapositive et un fondu à l'opacité.
Ainsi, ces jours-ci, il suffit simplement d’ajouter le widget que vous souhaitez transformer en GtkRevealer
et d’utiliser ses propriétés :transition-(type|duration)
et :reveal-child
.