Gần đây tôi đã thấy tiện ích này trong Gedit:
Nó xuất hiện khi bạn nhấn Ctrl + F
. Điều tôi quan tâm là làm thế nào để có được hiệu ứng trượt. Bất kỳ đề nghị sẽ được đánh giá cao.
Gần đây tôi đã thấy tiện ích này trong Gedit:
Nó xuất hiện khi bạn nhấn Ctrl + F
. Điều tôi quan tâm là làm thế nào để có được hiệu ứng trượt. Bất kỳ đề nghị sẽ được đánh giá cao.
Câu trả lời:
Tôi đã đạt được hiệu ứng mờ dần bằng cách sử dụng GTK và CSS thuần túy .
Nó chỉ hoạt động trong GTK 3.6 và tôi không chắc liệu hiệu ứng trượt vào / ra có khả thi hay không, tuy nhiên, nếu bạn muốn, bạn có thể xem nguồn tại launchpad.net/uberwriter
Nó hoạt động thông qua thay đổi trạng thái và sau đó là Chuyển đổi GTK ... Có thể với chiều cao // chiều rộng cũng có thể.
Bởi vì mọi người rõ ràng đánh giá thấp tôi, đây là một lời giải thích chi tiết hơn:
Đây là CSS tôi đã sử dụng:
GtkLabel:insensitive {
color: rgba(255,255,255,0);
transition: 500ms ease-in-out;
}
Nếu bạn sử dụng điều này như CSS (Tôi hy vọng tôi được phép tham khảo một lời giải thích từ chính mình, thì làm thế nào: http://wolfvollprecht.de/blog/gtk-python-and-css-are-an-awemme-combo/ ) sau đó bạn có thể sử dụng Gtk.StateFlags
để làm mờ nhãn.
ví dụ:
label.set_state_flags(Gtk.StateFlags.INSENSITIVE, True)
Sau đó, bạn nhận được một sự chuyển đổi sang độ mờ đục bằng không.
Tuy nhiên, như tôi đã nhận thấy, không có nhiều tùy chọn để ảnh hưởng đến vị trí / chiều rộng bằng CSS, vì vậy tôi đoán nó bị giới hạn về màu sắc / độ mờ đục, v.v.
Thưởng thức.
PS: Lưu ý rằng điều này chỉ hoạt động trong Gtk 3.6, kể từ Ubuntu 12.10
GtkRevealer
, có thể làm cả hai; thấy câu trả lời của tôi .
Hoạt hình như vậy là không thể đạt được trong GTK + thuần túy. Không có cơ chế sẽ xử lý nó.
Tôi đã xem nhanh mã nguồn của gedit, rõ ràng là họ tự xử lý hoạt hình này. Tôi chưa xem xét chi tiết, vì mã liên quan đến hoạt hình khá mở rộng, nhưng tôi đã lưu ý rằng chúng kết hợp các tính năng vẽ Cairo cho tiện ích tìm kiếm hoạt hình. Nhiều khả năng widget được hoạt hình bằng cách di chuyển khung vị trí của nó theo khung và vẽ lại nó ở một vị trí khác trong lớp phủ được sử dụng trên một vùng hiển thị văn bản.
Đó dường như là giải pháp đơn giản nhất. (mã của gedit dường như được chuẩn bị cho nhiều hình ảnh động có chung cơ sở mã, do đó có thể là quá mức cần thiết để sử dụng phương pháp chính xác của nó trong một ứng dụng đơn giản.)
Để tái tạo hiệu ứng này, bạn sẽ cần:
Tôi không thể đưa ra bất kỳ giải pháp dễ dàng hơn. Tuy nhiên, xem xét thực tế rằng các nhà phát triển gedit biết GTK + vì có lẽ rất ít làm, có thể không có mẹo đơn giản nào để đạt được hiệu quả như vậy.
Bạn có thể sử dụng kết hợp giữa Gtk.fixed (), GObject.timeout_add và chức năng di chuyển, đây là một ví dụ trong python:
#! / usr / bin / trăn * từ gi.reposeective nhập Gtk, GObject lớp TestWindow (Gtk.Window): def animateImage (tự): GObject.timeout_add (150, self.slideImage) def slideImage (tự): tự.poseitionX + = 50; if (self.poseitionX> 800): self.fixedWidget.move (self.logo, self.poseitionX, 200) trả lại đúng khác: trả về sai def __init __ (tự): Gtk.Window .__ init __ (tự, tiêu đề = 'Đăng ký') tự.poseitionX = 500 self.fixedWidget = Gtk.Fixed () self.fixedWidget.set_size_Vquest (1920,1080) self.fixedWidget.show () self.logo = Gtk.Image.new_from_file ('hình ảnh.png') tự.logo.show () self.fixedWidget.put (self.logo, self.poseitionX, 200) self.button1 = Gtk.Button ('Nhấp vào tôi để trượt hình ảnh!') tự.button1.show () self.button1.connect ('đã nhấp', self.animateImage) self.button1.set_size_Vquest (75,30) self.fixedWidget.put (self.button1,750,750) self.add (self.fixedWidget) testWindow = TestWindow () testWindow.set_size_Vquest (1920,1080) testWindow.set_name ('testWindow') testWindow.show () Gtk.main ()
Ngày nay, có một câu trả lời thực sự cho câu hỏi này. Vì ban đầu nó được hỏi và trả lời, mã để tiết lộ một widget từ libgd
- mà tôi đoán là GEdit đang sử dụng vào thời điểm đó - đã được đưa vào GTK + như GtkRevealer
sau:
https://developer.gnome.org/gtk3/ sóng / GtkRevealer.html
GtkRevealer
hỗ trợ các hình thức chuyển tiếp khác nhau, bao gồm các hướng trượt chính và độ mờ dần về độ mờ.
Vì vậy, ngày nay, đơn giản như việc thêm tiện ích mà bạn muốn chuyển sang GtkRevealer
và sử dụng các thuộc tính :transition-(type|duration)
và tiện ích của nó :reveal-child
.