Недавно я видел этот виджет в Gedit:
Появляется при нажатии Ctrl + F
. Меня интересует, как получить скользящий эффект. Любое предложение будет оценено.
Недавно я видел этот виджет в Gedit:
Появляется при нажатии Ctrl + F
. Меня интересует, как получить скользящий эффект. Любое предложение будет оценено.
Ответы:
Я достиг эффекта затухания, используя чистый GTK и CSS.
Он работает только в GTK 3.6, и я не уверен, будет ли возможен эффект слайд-шоу, однако, если вы хотите, вы можете посмотреть на источник по адресу launchpad.net/uberwriter
Он работает через изменение состояния и затем GTK Transitions ... Может быть, с высотой // шириной, что было бы возможно.
Поскольку люди, очевидно, опровергают меня, вот еще одно, более подробное объяснение:
Это 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
, что может сделать оба; смотри мой ответ .
Такая анимация недостижима в чистом GTK +. Нет механизмов, которые бы это обрабатывали.
Я быстро взглянул на исходный код gedit, стало ясно, что они обрабатывают эту анимацию самостоятельно. Я не стал вдаваться в подробности, поскольку код, связанный с анимацией, достаточно расширен, но я заметил, что они включают функции рисования в Каире для виджета анимированного поиска. Скорее всего, виджет анимируется, перемещая его положение кадр за кадром и перерисовывая его в другом месте наложения, которое используется в одной области отображения текста.
Это, кажется, самое простое решение. (Кажется, код gedit подготовлен для многих анимаций, использующих одну и ту же кодовую базу, поэтому использование точного подхода в простом приложении может оказаться излишним).
Чтобы воспроизвести этот эффект, вам необходимо:
Я не могу придумать более простого решения. Однако, учитывая тот факт, что разработчики Gedit знают GTK +, как, вероятно, очень мало, возможно, не существует более простого трюка для достижения такого эффекта.
Вы можете использовать комбинацию между Gtk.fixed (), GObject.timeout_add и функцией move, вот пример на python:
#! / USR / бен / питон * из gi.repository import Gtk, GObject Класс 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) верните True еще: вернуть Ложь 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 («Нажмите на меня, чтобы вставить изображение!») 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
свойства.