Recentemente eu vi esse widget no Gedit:
Aparece quando você pressiona Ctrl + F
. O que me interessa é como obter o efeito deslizante. Qualquer sugestão será apreciada.
Recentemente eu vi esse widget no Gedit:
Aparece quando você pressiona Ctrl + F
. O que me interessa é como obter o efeito deslizante. Qualquer sugestão será apreciada.
Respostas:
Consegui um efeito fade-out usando puro GTK e CSS.
Ele está funcionando apenas no GTK 3.6 e não tenho certeza se seria possível um efeito slide in / out; no entanto, se você quiser, pode procurar a fonte em launchpad.net/uberwriter
Funciona através de uma mudança de estado e, em seguida, de Transições GTK ... Talvez com height // width, também seria possível.
Como as pessoas obviamente me criticaram, aqui está outra explicação mais detalhada:
Este é o CSS que eu usei:
GtkLabel:insensitive {
color: rgba(255,255,255,0);
transition: 500ms ease-in-out;
}
Se você usar isso como CSS (espero poder me referir a uma explicação de mim mesmo, como fazer isso: http://wolfvollprecht.de/blog/gtk-python-and-css-are-an-awesome-combo/ ) então você pode usar Gtk.StateFlags
para esmaecer a etiqueta.
por exemplo:
label.set_state_flags(Gtk.StateFlags.INSENSITIVE, True)
Então você obtém uma transição para zero opacidade.
No entanto, como observei, não há muitas opções para influenciar o posicionamento / largura com CSS, então acho que é limitado a cores / opacidade etc.
Aproveitar.
PS: Observe que isso só funciona no Gtk 3.6, desde o Ubuntu 12.10
GtkRevealer
, o que pode fazer as duas coisas; veja minha resposta .
Essa animação não é possível em GTK + puro. Não há mecanismos que o processariam.
Dei uma rápida olhada no código fonte do gedit, é claro que eles processam essa animação por conta própria. Não examinei os detalhes, pois o código relacionado às animações é bastante expandido, mas notei que elas incorporam recursos de desenho do Cairo para o widget de pesquisa animado. Provavelmente, o widget é animado movendo sua posição quadro a quadro e redesenhando-o em um local diferente na sobreposição usada em uma única área de exibição de texto.
Essa parece ser a solução mais simples. (o código do gedit parece estar preparado para muitas animações que compartilham a mesma base de código, portanto, pode ser um exagero usar sua abordagem exata em um aplicativo simples.)
Para reproduzir esse efeito, você precisará:
Não consigo encontrar uma solução mais fácil. No entanto, considerando o fato de que os desenvolvedores do gedit conhecem o GTK + como provavelmente muito pouco, talvez não haja um truque mais simples para obter esse efeito.
Você pode usar uma combinação entre Gtk.fixed (), GObject.timeout_add e a função move, aqui está um exemplo em 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 (auto): self.positionX + = 50; if (self.positionX> 800): self.fixedWidget.move (self.logo, self.positionX, 200) return True outro: retorna falso def __init __ (próprio): 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 ('imagem.png') self.logo.show () self.fixedWidget.put (self.logo, self.positionX, 200) self.button1 = Gtk.Button ('Clique em mim para deslizar a imagem!') self.button1.show () self.button1.connect ('clicado', 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 ()
Atualmente, há uma resposta real para essa pergunta. Desde que foi originalmente perguntado e respondido, o código para revelar um widget libgd
- do qual presumo que o GEdit estava usando naquele momento - foi introduzido no GTK + como GtkRevealer
:
https://developer.gnome.org/gtk3/stable/GtkRevealer.html
GtkRevealer
suporta várias formas de transição, incluindo as direções principais do slide e um desbotamento da opacidade.
Portanto, atualmente, é tão simples quanto adicionar o widget para o qual você deseja fazer a transição GtkRevealer
e usar suas propriedades :transition-(type|duration)
e :reveal-child
.