Kürzlich habe ich dieses Widget in Gedit gesehen:
Es erscheint, wenn Sie drücken Ctrl + F
. Was mich interessiert, ist, wie man den Gleiteffekt erhält. Jeder Vorschlag wird geschätzt.
Kürzlich habe ich dieses Widget in Gedit gesehen:
Es erscheint, wenn Sie drücken Ctrl + F
. Was mich interessiert, ist, wie man den Gleiteffekt erhält. Jeder Vorschlag wird geschätzt.
Antworten:
Ich habe einen Ausblendeffekt mit reinem GTK und CSS erzielt .
Es funktioniert nur in GTK 3.6 und ich bin mir nicht sicher, ob ein Slide-In / Out-Effekt möglich wäre. Wenn Sie möchten, können Sie sich die Quelle unter launchpad.net/uberwriter ansehen
Es funktioniert durch eine Zustandsänderung und dann durch GTK-Übergänge ... Vielleicht wäre dies auch mit Höhe // Breite möglich.
Da die Leute mich offensichtlich ablehnen, ist hier eine weitere, detailliertere Erklärung:
Dies ist das CSS, das ich verwendet habe:
GtkLabel:insensitive {
color: rgba(255,255,255,0);
transition: 500ms ease-in-out;
}
Wenn Sie dies als CSS verwenden (ich hoffe, ich darf auf eine Erklärung von mir selbst verweisen, wie das geht: http://wolfvollprecht.de/blog/gtk-python-and-css-are-an-awesome-combo/ ) Dann können Sie Gtk.StateFlags
das Etikett ausblenden.
z.B:
label.set_state_flags(Gtk.StateFlags.INSENSITIVE, True)
Dann erhalten Sie einen Übergang zur Deckkraft Null.
Wie ich jedoch bemerkt habe, gibt es nicht viele Optionen, um die Platzierung / Breite mit CSS zu beeinflussen. Ich denke, es ist auf Farben / Deckkraft usw. beschränkt.
Genießen.
PS: Beachten Sie, dass dies nur in Gtk 3.6 funktioniert, seit Ubuntu 12.10
GtkRevealer
beides, was beides kann; siehe meine Antwort .
Eine solche Animation ist in reinem GTK + nicht erreichbar. Es gibt keine Mechanismen, die dies verarbeiten würden.
Ich habe einen kurzen Blick auf den Quellcode von gedit geworfen. Es ist klar, dass sie diese Animation selbst verarbeiten. Ich habe mich nicht mit Details befasst, da der Code für Animationen ziemlich erweitert ist, aber ich habe festgestellt, dass sie Kairo-Zeichenfunktionen für das animierte Such-Widget enthalten. Höchstwahrscheinlich wird das Widget animiert, indem seine Position Frame für Frame verschoben und an einer anderen Stelle in der Überlagerung neu gezeichnet wird, die in einem einzelnen Textanzeigebereich verwendet wird.
Das scheint die einfachste Lösung zu sein. (Der Code von gedit scheint für viele Animationen vorbereitet zu sein, die dieselbe Codebasis verwenden. Daher kann es ein Overkill sein, den genauen Ansatz in einer einfachen Anwendung zu verwenden.)
Um diesen Effekt zu reproduzieren, müssen Sie:
Ich kann keine einfachere Lösung finden. Angesichts der Tatsache, dass Gedit-Entwickler GTK + wahrscheinlich nur sehr wenig kennen, gibt es möglicherweise keinen einfacheren Trick, um einen solchen Effekt zu erzielen.
Sie können eine Kombination zwischen Gtk.fixed (), GObject.timeout_add und der Funktion move verwenden. Hier ein Beispiel in Python:
#! / usr / bin / python * aus gi.repository importieren Gtk, GObject Klasse 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) return True sonst: falsch zurückgeben def __init __ (self): Gtk.Window .__ init __ (self, title = 'Registrierung') 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 ('Klicken Sie auf mich, um das Bild zu schieben!') self.button1.show () self.button1.connect ('geklickt', 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 ()
Heutzutage gibt es eine echte Antwort auf diese Frage. Da es ursprünglich gefragt und beantwortet wurde, wurde der Code zum libgd
Anzeigen eines Widgets - von dem ich annehme, dass GEdit ihn zu diesem Zeitpunkt verwendet hat - in GTK + als Folgendes vorgeschaltet GtkRevealer
:
https://developer.gnome.org/gtk3/stable/GtkRevealer.html
GtkRevealer
unterstützt verschiedene Formen des Übergangs, einschließlich der Hauptrichtungen der Folie und einer Überblendung der Deckkraft.
Heutzutage ist es so einfach, das Widget hinzuzufügen, zu dem Sie wechseln möchten, GtkRevealer
und dessen :transition-(type|duration)
und :reveal-child
Eigenschaften zu verwenden.