Récemment, j'ai 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 de glissement. N'hésitez pas à nous faire part de vos suggestions.
Récemment, j'ai 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 de glissement. N'hésitez pas à nous faire part de vos suggestions.
Réponses:
J'ai obtenu un effet de fondu en utilisant GTK et CSS purs .
Cela ne fonctionne que dans GTK 3.6 et je ne sais pas si un effet de glissement entrant / sortant serait possible, cependant, si vous le souhaitez, vous pouvez regarder la source sur launchpad.net/uberwriter
Cela fonctionne à travers un changement d'état, puis des transitions GTK ... Peut-être qu'avec la hauteur // largeur, cela serait également possible.
Parce que les gens me déprécient évidemment, voici une autre explication plus détaillée:
Voici le CSS que j'ai utilisé:
GtkLabel:insensitive {
color: rgba(255,255,255,0);
transition: 500ms ease-in-out;
}
Si vous l'utilisez comme CSS (j'espère que je suis autorisé à faire référence à une explication de moi-même, comment faire: http://wolfvollprecht.de/blog/gtk-python-and-css-are-an-awesome-combo/ ) vous pouvez ensuite utiliser Gtk.StateFlags
pour estomper l’étiquette.
par exemple:
label.set_state_flags(Gtk.StateFlags.INSENSITIVE, True)
Ensuite, vous obtenez une transition vers une opacité nulle.
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 ne fonctionne que dans Gtk 3.6, depuis Ubuntu 12.10
GtkRevealer
, qui peut faire les deux; voir ma réponse .
Une telle animation n'est pas réalisable en GTK + pur. Il n'y a aucun mécanisme pour le traiter.
J'ai donné un rapide aperçu du code source de gedit, il est clair qu'ils traitent cette animation par eux-mêmes. Je n'ai pas examiné les détails, car le code lié aux animations est assez développé, mais j'ai remarqué qu'ils incorporent des fonctionnalités de dessin du Caire pour le widget de recherche animé. Le widget est très probablement animé en déplaçant sa position image par image et en le redessinant à un endroit différent de la superposition utilisée sur une seule zone d'affichage de texte.
Cela semble être la solution la plus simple. (Le code de gedit semble être préparé pour de nombreuses animations partageant la même base de code, donc il peut être exagéré d'utiliser son approche exacte dans une application simple.)
Pour reproduire cet effet, vous devrez:
Je ne peux pas trouver de solution plus simple. Cependant, étant donné que les développeurs de gedit connaissent GTK + comme probablement très peu, il n'y a peut-être pas de truc plus simple pour obtenir un tel effet.
Vous pouvez utiliser une combinaison entre Gtk.fixed (), GObject.timeout_add et le déplacement de fonction, voici un exemple en python:
#! / usr / bin / python * depuis gi.repository import Gtk, GObject classe TestWindow (Gtk.Window): def animateImage (auto): GObject.timeout_add (150, self.slideImage) def slideImage (auto): self.positionX + = 50; si (self.positionX> 800): self.fixedWidget.move (self.logo, self.positionX, 200) retourne vrai autre: retour Faux def __init __ (auto): 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 ('cliqué', 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é initialement demandé et répondu, le code pour révéler un widget à partir libgd
duquel - je suppose que c'est ce que GEdit utilisait à l'époque - a été amont dans GTK + comme GtkRevealer
:
https://developer.gnome.org/gtk3/stable/GtkRevealer.html
GtkRevealer
prend en charge diverses formes de transition, y compris les directions cardinales de glissement et un fondu sur l'opacité.
Donc, de nos jours, c'est aussi simple que d'ajouter le widget vers lequel vous souhaitez effectuer la transition GtkRevealer
et d'utiliser ses propriétés :transition-(type|duration)
et :reveal-child
.