Recentemente ho visto questo widget in Gedit:
Appare quando si preme Ctrl + F
. Quello che mi interessa è come ottenere l'effetto scorrevole. Ogni suggerimento sarà apprezzato.
Recentemente ho visto questo widget in Gedit:
Appare quando si preme Ctrl + F
. Quello che mi interessa è come ottenere l'effetto scorrevole. Ogni suggerimento sarà apprezzato.
Risposte:
Ho ottenuto un effetto di dissolvenza usando GTK e CSS puri .
Funziona solo in GTK 3.6 e non sono sicuro che sia possibile un effetto slide in / out, tuttavia, se lo desideri, puoi consultare la fonte su launchpad.net/uberwriter
Funziona attraverso un cambio di stato e poi Transizioni GTK ... Forse anche con altezza // larghezza sarebbe possibile.
Poiché la gente ovviamente mi ha votato in basso, ecco un'altra spiegazione più dettagliata:
Questo è il CSS che ho usato:
GtkLabel:insensitive {
color: rgba(255,255,255,0);
transition: 500ms ease-in-out;
}
Se lo usi come CSS (spero di poter fare riferimento a una mia spiegazione, come farlo: http://wolfvollprecht.de/blog/gtk-python-and-css-are-an-awesome-combo/ ) quindi puoi usarlo Gtk.StateFlags
per sfumare l'etichetta.
per esempio:
label.set_state_flags(Gtk.StateFlags.INSENSITIVE, True)
Quindi ottieni una transizione a zero opacità.
Tuttavia, come ho notato, non ci sono molte opzioni per influenzare il posizionamento / larghezza con CSS, quindi suppongo che sia limitato a colori / opacità ecc.
Godere.
PS: Nota che funziona solo in Gtk 3.6, da Ubuntu 12.10
GtkRevealer
, che può fare entrambe le cose; vedi la mia risposta .
Una simile animazione non è realizzabile in GTK + puro. Non ci sono meccanismi che potrebbero elaborarlo.
Ho dato una rapida occhiata al codice sorgente di gedit, è chiaro che elaborano questa animazione da soli. Non ho esaminato i dettagli, poiché il codice relativo alle animazioni è abbastanza esteso, ma ho notato che incorporano le funzionalità di disegno del Cairo per il widget di ricerca animata. Molto probabilmente il widget viene animato spostando la sua posizione fotogramma per fotogramma e ridisegnandolo in una posizione diversa nella sovrapposizione utilizzata in una singola area di visualizzazione del testo.
Questa sembra essere la soluzione più semplice. (il codice di gedit sembra essere preparato per molte animazioni che condividono la stessa base di codice, quindi potrebbe essere eccessivo usare il suo approccio esatto in una semplice applicazione.)
Per riprodurre questo effetto, dovrai:
Non riesco a trovare una soluzione più semplice. Tuttavia, considerando il fatto che gli sviluppatori di Gedit conoscono GTK + come probabilmente molto poco, potrebbe non esserci un trucco più semplice per ottenere tale effetto.
Puoi usare una combinazione tra Gtk.fixed (), GObject.timeout_add e la funzione move, ecco un esempio in python:
#! / Usr / bin / python * da gi.repository import Gtk, GObject classe 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) restituisce True altro: restituisce 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 ('Fai clic per scorrere l'immagine!') 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 ()
Oggi c'è una vera risposta a questa domanda. Da quando è stato originariamente chiesto e risposto, il codice per rivelare un widget da libgd
- che presumo sia quello che GEdit stava usando in quel momento - è stato upstream in GTK + come GtkRevealer
:
https://developer.gnome.org/gtk3/stable/GtkRevealer.html
GtkRevealer
supporta varie forme di transizione, comprese le direzioni cardinali della diapositiva e una dissolvenza sull'opacità.
Quindi, in questi giorni, è semplice come aggiungere il widget che si desidera passare a un GtkRevealer
e utilizzarne le proprietà :transition-(type|duration)
e :reveal-child
.