최근 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)
그런 다음 불투명도가 0으로 전환됩니다.
그러나 내가 알았 듯이 CSS를 사용하여 배치 / 너비에 영향을 줄 수있는 옵션이 많지 않으므로 색상 / 불투명도 등으로 제한됩니다.
즐겨.
추신 : 우분투 12.10 이후 Gtk 3.6 에서만 작동합니다.
GtkRevealer
둘 다 할 수 있습니다. 내 대답을 참조하십시오 .
순수한 GTK +에서는 이러한 애니메이션을 얻을 수 없습니다. 처리 할 메커니즘이 없습니다.
gedit의 소스 코드를 간략히 살펴 보았지만이 애니메이션을 자체적으로 처리하는 것이 분명합니다. 애니메이션과 관련된 코드가 상당히 확장 되었기 때문에 자세한 내용을 살펴 보지 않았지만 애니메이션 검색 위젯에 대한 카이로 그리기 기능이 통합되어 있습니다. 위젯은 위치를 프레임 단위로 이동하고 단일 텍스트 표시 영역에서 사용되는 오버레이의 다른 위치에 다시 그려서 애니메이션을 만듭니다.
가장 간단한 해결책 인 것 같습니다. (gedit의 코드는 동일한 코드 기반을 공유하는 많은 애니메이션에 대해 준비된 것으로 보이므로 간단한 응용 프로그램에서 정확한 접근 방식을 사용하는 것은 과도한 일이 될 수 있습니다.)
이 효과를 재현하려면 다음이 필요합니다.
더 쉬운 해결책을 찾지 못했습니다. 그러나 gedit 개발자들이 GTK +에 대해 거의 아는 바가 없다는 사실을 고려할 때 그러한 효과를 얻는 간단한 방법은 없을 것입니다.
Gtk.fixed (), GObject.timeout_add와 함수 이동 사이의 조합을 사용할 수 있습니다. 파이썬의 예는 다음과 같습니다.
#! / usr / bin / python * gi.repository에서 가져 오기 Gtk, GObject TestWindow (Gtk.Window) 클래스 : 데프 애니메이션 이미지 (자체) : GObject.timeout_add (150, self.slideImage) 데프 슬라이드 이미지 (자체) : self.positionX + = 50; if (self.positionX> 800) : self.fixedWidget.move (self.logo, self.positionX, 200) True를 반환 그밖에: False를 반환 데프 __init __ (self) : Gtk.Window .__ init __ (자체, 제목 = '등록') 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이 당시 사용했던 것으로 가정합니다 .GTK +에 다음과 같이 업스트림되었습니다 GtkRevealer
.
https://developer.gnome.org/gtk3/stable/GtkRevealer.html
GtkRevealer
슬라이드의 기본 방향 및 불투명도의 페이드를 포함하여 다양한 형태의 전환을 지원합니다.
요즘에는 전환하려는 위젯을 추가 GtkRevealer
하고 :transition-(type|duration)
및 :reveal-child
속성을 사용 하는 것만 큼 간단 합니다.