最近、私はGeditでこのウィジェットを見ました:
Ctrl + F
を押すと表示されます。私が興味を持っているのは、スライド効果を得る方法です。ご提案をいただければ幸いです。
pureGTKとCSSを使用してフェードアウト効果を達成しました。
GTK 3.6でのみ動作しており、スライドイン/アウトエフェクトが可能かどうかはわかりませんが、必要に応じて、launchpad.net/uberwriterでソースを見ることができます。
それは状態変更とGTKトランジションによって機能します...たぶん高さ//幅も可能です。
人々が明らかに私に賛成票を投じたので、ここにもう一つの、より詳細な説明があります:
これは私が使用したCSSです。
GtkLabel:insensitive {
color: rgba(255,255,255,0);
transition: 500ms ease-in-out;
}
これをCSSとして使用する場合(私は自分自身から説明を参照できるように願っています、その方法: http://wolfvollprecht.de/blog/gtk-python-and-css-are-an-awesome -combo / )その後、Gtk.StateFlags
を使用してラベルをフェードアウトできます。
例えば。:
label.set_state_flags(Gtk.StateFlags.INSENSITIVE, True)
次に、不透明度ゼロへの移行を取得します。
ただし、気づいたように、CSSで配置/幅に影響を与えるオプションは多くないため、色/不透明度などに限定されていると思います。
楽しい。
PS:Ubuntu(12.10)以降、これはonlyがGtk 3.6で機能することに注意してください
このようなアニメーションは、純粋なGTK +では実現できません。それを処理するメカニズムはありません。
私はgeditのソースコードを簡単に見てきました。彼らがこのアニメーションを独自に処理していることは明らかです。アニメーションに関連するコードは非常に拡張されているため、詳細は検討していませんが、アニメーション検索ウィジェット用のCairo描画機能が組み込まれていることに注意しました。ほとんどの場合、ウィジェットはフレームごとに位置を移動し、単一のテキスト表示領域で使用されるオーバーレイの別の場所に再描画することでアニメーション化されます。
それが最も簡単な解決策のようです。 (geditのコードは、同じコードベースを共有する多くのアニメーション用に準備されているようです。したがって、単純なアプリケーションで正確なアプローチを使用するのはやり過ぎかもしれません。)
この効果を再現するには、以下が必要です。
もっと簡単な解決策は思いつきません。ただし、gedit開発者がGTK +を知っている可能性が非常に低いことを考えると、そのような効果を達成するための簡単なトリックはないかもしれません。
Gtk.fixed()、GObject.timeout_addと関数moveの組み合わせを使用できます。これはpythonの例です:
#!/ usr/bin/python * from from gi.repository import Gtk、GObject class 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 else: return 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 (「画像をクリックしてスライドさせてください!」) 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 ()
今日、この質問に対する本当の答えがあります。もともと質問と回答があったので、libgd
からウィジェットを表示するためのコードは、その時点でGEditが使用していたものと推測されますが、GtkRevealer
としてGTK +にアップストリームされました。
https://developer.gnome.org/gtk3/stable/GtkRevealer.html
GtkRevealer
は、スライドの基本的な方向や不透明度のフェードなど、さまざまな形式の遷移をサポートします。
そのため、最近では、GtkRevealer
に移行するウィジェットを追加し、その:transition-(type|duration)
および:reveal-child
プロパティを使用するのと同じくらい簡単です。