Ostatnio widziałem ten widget w Gedit:
Pojawia się po naciśnięciu Ctrl + F
. Interesuje mnie, jak uzyskać efekt przesuwny. Wszelkie sugestie będą mile widziane.
Ostatnio widziałem ten widget w Gedit:
Pojawia się po naciśnięciu Ctrl + F
. Interesuje mnie, jak uzyskać efekt przesuwny. Wszelkie sugestie będą mile widziane.
Odpowiedzi:
Osiągnąłem efekt zanikania za pomocą czystego GTK i CSS.
Działa tylko w GTK 3.6 i nie jestem pewien, czy efekt wsunięcia / wyjazdu byłby możliwy, jednak jeśli chcesz, możesz zajrzeć do źródła na launchpad.net/uberwriter
Działa poprzez zmianę stanu, a następnie GTK Transitions ... Może przy wysokości // szerokości też byłoby to możliwe.
Ponieważ ludzie oczywiście głosują za mną, oto inne, bardziej szczegółowe wyjaśnienie:
Oto CSS, którego użyłem:
GtkLabel:insensitive {
color: rgba(255,255,255,0);
transition: 500ms ease-in-out;
}
Jeśli używasz tego jako CSS (mam nadzieję, że mogę odnieść się do samego wyjaśnienia, jak to zrobić: http://wolfvollprecht.de/blog/gtk-python-and-css-are-an-awesome-combo/ ) następnie możesz użyć Gtk.StateFlags
do wyciszenia etykiety.
na przykład:
label.set_state_flags(Gtk.StateFlags.INSENSITIVE, True)
Następnie uzyskasz przejście do zerowego krycia.
Jednak, jak zauważyłem, nie ma wielu opcji wpływania na położenie / szerokość za pomocą CSS, więc myślę, że ogranicza się to do kolorów / krycia itp.
Cieszyć się.
PS: Zauważ, że działa to tylko w Gtk 3.6, ponieważ Ubuntu 12.10
GtkRevealer
, co może zrobić oba; zobacz moją odpowiedź .
Takiej animacji nie da się osiągnąć w czystej wersji GTK +. Nie ma mechanizmów, które by to przetworzyły.
Rzuciłem okiem na kod źródłowy gedit, jasne jest, że przetwarzają tę animację samodzielnie. Nie analizowałem szczegółów, ponieważ kod związany z animacjami jest dość rozbudowany, ale zauważyłem, że zawierają one funkcje rysowania Kair dla animowanego widżetu wyszukiwania. Najprawdopodobniej widget jest animowany poprzez przesuwanie jego pozycji klatka po klatce i przerysowywanie go w innym miejscu nakładki używanej w jednym obszarze wyświetlania tekstu.
To wydaje się być najprostszym rozwiązaniem. (wydaje się, że kod gedit jest przygotowany na wiele animacji korzystających z tej samej bazy kodu, więc używanie jego dokładnego podejścia w prostej aplikacji może być przesadą).
Aby odtworzyć ten efekt, musisz:
Nie mogę znaleźć prostszego rozwiązania. Jednak biorąc pod uwagę fakt, że programiści gedit znają GTK +, jak zapewne bardzo mało, może nie być prostszej sztuczki, aby osiągnąć taki efekt.
Możesz użyć kombinacji Gtk.fixed (), GObject.timeout_add i funkcji move, oto przykład w python:
#! / usr / bin / python * z gi.repository import Gtk, GObject klasa TestWindow (Gtk.Window): def animateImage (self): GObject.timeout_add (150, self.slideImage) def slideImage (self): pozycja własna X + = 50; jeśli (self.positionX> 800): self.fixedWidget.move (self.logo, self.positionX, 200) zwróć True jeszcze: zwrócić 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 („Kliknij mnie, aby przesunąć obraz!”) self.button1.show () self.button1.connect („kliknięty”, self.animateImage) self.button1.set_size_request (75,30) self.fixedWidget.put (przycisk self.button1,750,750) self.add (self.fixedWidget) testWindow = TestWindow () testWindow.set_size_request (1920,1080) testWindow.set_name ('testWindow') testWindow.show () Gtk.main ()
Obecnie istnieje prawdziwa odpowiedź na to pytanie. Od momentu pierwotnego pytania i odpowiedzi, kod do ujawnienia widżetu, z libgd
którego - jak zakładam - korzystał wówczas GEdit - został przesłany do GTK + jako GtkRevealer
:
https://developer.gnome.org/gtk3/stable/GtkRevealer.html
GtkRevealer
obsługuje różne formy przejścia, w tym kardynalne kierunki przesuwu i zanikanie krycia.
W dzisiejszych czasach jest to tak proste, jak dodanie widżetu, do którego chcesz przejść, GtkRevealer
oraz użycie jego :transition-(type|duration)
i :reveal-child
właściwości.