Baru-baru ini saya melihat widget ini di Gedit:
Itu muncul ketika Anda menekan Ctrl + F
. Yang saya tertarik adalah bagaimana mendapatkan efek geser. Setiap saran akan dihargai.
Baru-baru ini saya melihat widget ini di Gedit:
Itu muncul ketika Anda menekan Ctrl + F
. Yang saya tertarik adalah bagaimana mendapatkan efek geser. Setiap saran akan dihargai.
Jawaban:
Saya telah mencapai efek fade-out menggunakan GTK dan CSS murni .
Ini hanya bekerja di GTK 3.6 dan saya tidak yakin apakah efek geser masuk / keluar mungkin terjadi, namun, jika Anda mau, Anda dapat melihat sumbernya di launchpad.net/uberwriter
Ia bekerja melalui perubahan status dan kemudian Transisi GTK ... Mungkin dengan tinggi // lebar itu juga mungkin.
Karena orang-orang jelas-jelas mengecewakan saya, berikut ini penjelasan lain yang lebih terperinci:
Ini adalah CSS yang saya gunakan:
GtkLabel:insensitive {
color: rgba(255,255,255,0);
transition: 500ms ease-in-out;
}
Jika Anda menggunakan ini sebagai CSS (saya harap saya diizinkan untuk merujuk penjelasan dari diri saya sendiri, caranya: http://wolfvollprecht.de/blog/gtk-python-and-css-are-an-awesome-combo/ ) maka Anda dapat menggunakannya Gtk.StateFlags
untuk menghilangkan Label.
misalnya:
label.set_state_flags(Gtk.StateFlags.INSENSITIVE, True)
Kemudian Anda mendapatkan transisi ke opacity nol.
Namun, seperti yang saya perhatikan, tidak ada banyak pilihan untuk mempengaruhi penempatan / lebar dengan CSS, jadi saya kira itu terbatas pada warna / opacity dll.
Nikmati.
PS: Perhatikan bahwa ini hanya berfungsi di Gtk 3.6, sejak Ubuntu 12.10
GtkRevealer
, yang dapat melakukan keduanya; lihat jawaban saya .
Animasi semacam itu tidak dapat dicapai di GTK + murni. Tidak ada mekanisme yang akan memprosesnya.
Saya telah melihat sekilas kode sumber gedit, jelas bahwa mereka memproses animasi ini sendiri. Saya belum melihat detailnya, karena kode yang terkait dengan animasi cukup diperluas, tetapi saya perhatikan bahwa mereka memasukkan fitur menggambar Kairo untuk widget pencarian animasi. Kemungkinan besar widget dianimasikan dengan menggerakkan posisinya bingkai demi bingkai dan menggambarnya kembali di tempat berbeda dalam hamparan yang digunakan pada area tampilan teks tunggal.
Itu tampaknya menjadi solusi paling sederhana. (Kode gedit tampaknya dipersiapkan untuk banyak animasi yang berbagi basis kode yang sama, sehingga mungkin merupakan kerja keras untuk menggunakan pendekatan yang tepat dalam aplikasi sederhana.)
Untuk mereproduksi efek ini, Anda harus:
Saya tidak dapat menemukan solusi yang lebih mudah. Namun, mengingat fakta bahwa pengembang gedit tahu GTK + mungkin sangat sedikit, mungkin tidak ada trik sederhana untuk mencapai efek seperti itu.
Anda dapat menggunakan kombinasi antara Gtk.fixed (), GObject.timeout_add dan pemindahan fungsi, berikut adalah contoh dalam python:
#! / usr / bin / python * dari gi.repositori, impor Gtk, GObject kelas 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) mengembalikan True lain: mengembalikan False def __init __ (mandiri): Gtk.Window .__ init __ (diri, judul = 'Pendaftaran') 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 ('Klik saya untuk menggeser gambar!') self.button1.show () self.button1.connect ('diklik', 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 ()
Saat ini, ada jawaban nyata untuk pertanyaan ini. Sejak awalnya ditanyakan dan dijawab, kode untuk membuka widget dari libgd
- yang saya duga adalah apa yang digunakan GEdit pada saat itu - telah di-upstream ke GTK + sebagai GtkRevealer
:
https://developer.gnome.org/gtk3/stable/GtkRevealer.html
GtkRevealer
mendukung berbagai bentuk transisi, termasuk arah mata angin slide dan fade pada opacity.
Jadi, hari ini, sesederhana menambahkan widget yang ingin Anda transisikan ke GtkRevealer
dan menggunakan properti :transition-(type|duration)
dan :reveal-child
.