Nie rozumiem Efekt przesuwny wyjaśnia, co oznacza „efekt przesuwny”
twister_void
@Gaurav_Java wydaje się przesuwać spod górnego panelu. Jeśli zobaczysz to w Gedit, zobaczysz, że naciskasz „Ctrl + F”
Ángel Araya
Wydaje mi się, że efekt ten często nazywany jest „rozwijanym” - czasami menu są animowane w ten sam sposób.
Steve Kroon,
1
Pomyślałem, że możesz użyć właściwości przejścia css, ale nie widzę, jak zmienić pozycję w css. Przeglądając kod gedit, wydają się używać niestandardowej ramki widoku dla pola wyszukiwania bazaar.launchpad.net/~vcs-imports/gedit/master-git/view/head:/…, które animują za pomocą modułu theatrics (patrz na bzr). Jednak nie jestem zbyt dobry w analizowaniu kodu C.
Ian B.,
1
BTW, ten widget jest również w Google Chrome (i prawdopodobnie Chromium)
Ian B.
Odpowiedzi:
7
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.
EDYTOWAĆ
Ponieważ ludzie oczywiście głosują za mną, oto inne, bardziej szczegółowe wyjaśnienie:
Ludzie prawdopodobnie głosowali za odrzuceniem, ponieważ pytanie dotyczyło ruchomej animacji, ale daliście nieprzejrzyste przejście, które jest zupełnie inne ... więc nie wiem, dlaczego tak wielu innych ludzi głosowało za tym . Tak czy inaczej, obecnie istnieje coś GtkRevealer, co może zrobić oba; zobacz moją odpowiedź .
underscore_d
3
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:
Użyj niestandardowego widgetu dla elementu interfejsu, który chcesz wsuwać / wysuwać.
Niech reaguje na zdarzenie losowania i okresowe limity czasu (aby przerysować każdą klatkę animacji)
Utwórz przezroczystą nakładkę na pozostałe widżety (lub dowolny obszar, który musi wyglądać, jakby znajdował się poniżej przesuwanego widżetu)
Narysuj ręcznie animowany widget na takiej nakładce.
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.
Wygląda na to, że Twój pomysł jest „najprostszy”. Pomyślałem, że można to zrobić za pomocą hakowania CSS, ale czytanie kodu Gedita wydaje się bardziej zakodowane i przygotowane na coś więcej niż zwykłe wpisywanie w polu wyszukiwania, jak mówisz. Spróbuję więc stworzyć niestandardowy widget i najpierw przenieść go na określone zdarzenia (przynajmniej jeśli to możliwe). Dziękuję za twoje sugestie.
Ángel Araya
1
Możesz użyć kombinacji Gtk.fixed (), GObject.timeout_add i funkcji move, oto przykład w python:
Obecnie istnieje prawdziwa odpowiedź na to pytanie. Od momentu pierwotnego pytania i odpowiedzi, kod do ujawnienia widżetu, z libgdktórego - jak zakładam - korzystał wówczas GEdit - został przesłany do GTK + jako GtkRevealer:
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ść, GtkRevealeroraz użycie jego :transition-(type|duration)i :reveal-childwłaściwości.
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.
EDYTOWAĆ
Ponieważ ludzie oczywiście głosują za mną, oto inne, bardziej szczegółowe wyjaśnienie:
Oto CSS, którego użyłem:
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
źródło
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.
źródło
Możesz użyć kombinacji Gtk.fixed (), GObject.timeout_add i funkcji move, oto przykład w python:
źródło
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 + jakoGtkRevealer
: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.źródło