Недавно я видел этот виджет в Gedit:
Появляется, когда Вы нажимаете Ctrl + F
. То, что мне интересно, находится в том, как получить скользящий эффект. Любое предложение будет цениться.
Я достиг эффекта постепенного исчезновения с помощью чистого GTK и CSS.
Это только работает в GTK 3.6, и я не уверен, был ли слайд в / эффект возможен, однако, если Вы хотите, можно посмотреть на источник по launchpad.net/uberwriter
Это работает посредством изменения состояния и затем Переходов GTK... Возможно, с высотой//ширина, которая была бы возможна, также.
Поскольку люди, очевидно, downvote меня, вот другой, более подробное объяснение:
Это - 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
Такая анимация не достижима в чистом GTK +. Нет никаких механизмов, которые обработали бы его.
я дал беглый взгляд на исходном коде gedit, ясно, что они обрабатывают эту анимацию самостоятельно. Я не изучил детали, поскольку код, связанный с анимациями, вполне расширен, но я отметил, что они включают Каирские функции рисунка анимированного поискового виджета. Скорее всего, виджет анимирован путем перемещения его кадра положения кадром и перерисовки его на другом месте в наложении, которое используется на единственной текстовой области дисплея.
, Который, кажется, простое решение. (код gedit, кажется, подготовлен ко многим анимациям, совместно использующим ту же кодовую базу, таким образом это может быть излишество для использования, это - точный подход в простом приложении.)
Для репродуцирования этого эффекта Вы должны будете:
я не могу предложить более легкое решение. Однако рассматривая то, что gedit разработчики действительно знают, GTK + как, вероятно, очень мало делают, не может быть никакого более простого приема для достижения такого эффекта.
В наше время существует реальный ответ на этот вопрос. Так как это первоначально спросили и ответили, код для раскрытия виджета от libgd
- который я предполагаю, то, что GEdit использовал в то время - был upstreamed в GTK + как GtkRevealer
:
https://developer.gnome.org/gtk3/stable/GtkRevealer.html
GtkRevealer
поддержки различные формы перехода, включая кардинальные направления слайда и исчезновения на непрозрачности.
Так, в эти дни, это столь же просто как добавление виджета, что Вы хотите перейти к GtkRevealer
и использование :transition-(type|duration)
и :reveal-child
свойства.
Можно использовать комбинацию между Gtk.fixed (), GObject.timeout_add и функциональным перемещением, вот пример в Python:
#!/usr/bin/python* from gi.repository import Gtk, GObject class 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) return True else: return False def __init__(self): 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('Click me to slide image!') 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()