เมื่อเร็ว ๆ นี้ฉันเคยเห็นวิดเจ็ตนี้ใน Gedit:

Ctrl + Fมันจะปรากฏขึ้นเมื่อคุณกด สิ่งที่ฉันสนใจคือการหาเอฟเฟ็กต์การเลื่อน ข้อเสนอแนะใด ๆ จะได้รับการชื่นชม
เมื่อเร็ว ๆ นี้ฉันเคยเห็นวิดเจ็ตนี้ใน Gedit:

Ctrl + Fมันจะปรากฏขึ้นเมื่อคุณกด สิ่งที่ฉันสนใจคือการหาเอฟเฟ็กต์การเลื่อน ข้อเสนอแนะใด ๆ จะได้รับการชื่นชม
คำตอบ:
ฉันได้รับเอฟเฟกต์จางหายไปโดยใช้GTK และ 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: โปรดทราบว่านี่ใช้ได้เฉพาะใน Gtk 3.6 ตั้งแต่ Ubuntu 12.10
GtkRevealerซึ่งสามารถทำได้ทั้งสองอย่าง ดูคำตอบของฉัน
ภาพเคลื่อนไหวดังกล่าวไม่สามารถทำได้ใน pure GTK + ไม่มีกลไกที่จะดำเนินการ
ฉันได้ดูอย่างรวดเร็วเกี่ยวกับซอร์สโค้ดของ gedit เป็นที่ชัดเจนว่าพวกเขาประมวลผลภาพเคลื่อนไหวนี้ด้วยตัวเอง ฉันไม่ได้ดูรายละเอียดเพราะรหัสที่เกี่ยวข้องกับภาพเคลื่อนไหวค่อนข้างขยาย แต่ฉันสังเกตว่าพวกเขารวมคุณสมบัติการวาดภาพของไคโรไว้สำหรับวิดเจ็ตการค้นหาภาพเคลื่อนไหว วิดเจ็ตส่วนใหญ่มีการเคลื่อนไหวโดยการเลื่อนเฟรมตำแหน่งโดยเฟรมและวาดใหม่ในตำแหน่งอื่นในการซ้อนทับที่ใช้ในพื้นที่แสดงข้อความเดียว
นั่นดูเหมือนจะเป็นทางออกที่ง่ายที่สุด (ดูเหมือนว่าโค้ดของ gedit นั้นจะถูกเตรียมไว้สำหรับแอนิเมชั่นจำนวนมากที่แชร์ฐานรหัสเดียวกันดังนั้นจึงอาจใช้เกินวิธีที่จะใช้ในการสมัครง่ายๆ)
ในการทำซ้ำเอฟเฟกต์นี้คุณจะต้อง:
ฉันไม่สามารถหาวิธีแก้ปัญหาที่ง่ายกว่านี้ได้อีก อย่างไรก็ตามเมื่อพิจารณาจากข้อเท็จจริงที่ว่าผู้พัฒนา gedit รู้ว่า GTK + อาจทำอะไรได้น้อยมาก
คุณสามารถใช้การรวมกันระหว่าง Gtk.fixed (), GObject.timeout_add และการย้ายฟังก์ชั่นนี่คือตัวอย่างในไพ ธ อน:
#! / usr / bin / หลาม *
จาก gi.repository นำเข้า Gtk, GObject
คลาส TestWindow (Gtk.Window):
def animateImage (ตัวเอง):
GObject.timeout_add (150, self.slideImage)
def slideImage (ตัวเอง):
self.positionX + = 50;
ถ้า (self.positionX> 800):
self.fixedWidget.move (self.logo, self.positionX 200)
กลับ True
อื่น:
กลับเท็จ
def __init __ (ตัวเอง):
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 ('คลิก', 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 ใช้ในเวลานั้นได้ถูกอัปเกรดเป็น GTK + เป็นGtkRevealer:
https://developer.gnome.org/gtk3/stable/GtkRevealer.html
GtkRevealer รองรับการเปลี่ยนแปลงในรูปแบบต่าง ๆ รวมถึงทิศทางที่สำคัญของสไลด์และจางลงบนความทึบ
ดังนั้นวันนี้มันเป็นเรื่องง่ายเหมือนการเพิ่มวิดเจ็ตที่คุณต้องการเปลี่ยนเป็นGtkRevealerและใช้:transition-(type|duration)และ:reveal-childคุณสมบัติ