เมื่อเร็ว ๆ นี้ฉันเคยเห็นวิดเจ็ตนี้ใน 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
คุณสมบัติ