Почему анимация при наведении игнорирует время перехода и работает в Gtk3?

С новым gtk можно создавать графические темы с файлом наподобие css.

Учитывая этот файл css (с именем my-gtk-widgets.css):

.button {
    border-radius: 0;
    border-style: solid;
}

.button:hover {
    transition: 3000ms linear;
    border-radius: 50;
}

И следующий код Python:

from gi.repository import Gtk
from gi.repository import Gdk

def _destroy_cb(widget, data=None):
    Gtk.main_quit()

window = Gtk.Window()
window.connect("destroy", _destroy_cb)

screen = Gdk.Screen.get_default()

css_provider = Gtk.CssProvider()
css_provider.load_from_path('my-gtk-widgets.css')

context = Gtk.StyleContext()
context.add_provider_for_screen(screen, css_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)

box = Gtk.VBox()
window.add(box)

button = Gtk.Button('go-next')
box.pack_start(button, False, False, 0)

window.show_all()
Gtk.main()

Запуск этого кода дает кнопку, которая изменяет радиус границы при наведении курсора. Но переход мгновенный, а не анимированный.

введите здесь описание изображения

введите здесь описание изображения

Что является причиной этого? Нужна ли мне другая версия gtk, python,...? Или эта анимация зависит от темы gtk (в моем случае Ubuntu по умолчанию Ambience)? Или что-то не так в моем файле css?

версия питона: 2.7.2+

ГТК версия: 3.0

РЕДАКТИРОВАТЬ: пример представляет собой модифицированную версию этот


person xubuntix    schedule 11.01.2012    source источник


Ответы (2)


Я не эксперт в CSS, но похоже, что вы пытаетесь применить переход к свойству, к которому нельзя применить переход/анимацию (из этот список кажется, что переход на border-radius не поддерживается) Вы можете попробовать что-то вроде background-color, чтобы увидеть эффекты перехода на кнопке в вашем приложении (изменение цвета переход был виден - Gtk-3.0, python-2.7.1, FC15)

.button {
    background-color: #00ffff;
    border-style: solid;
}

.button:hover {
    transition: 1s linear;
    background-color: #00ff00;
}

Надеюсь это поможет!

person another.anon.coward    schedule 18.01.2012
comment
Спасибо за твой ответ. Однако это не работает: в то время как время перехода фона соответственно изменяется, фоновый цвет не подбирается (и, например, цвет границы, отступы-верх, ...). Итак, мой первоначальный вопрос остается: что мне нужно изменить, чтобы заставить это работать? Кажется, что css не является основной проблемой. - person xubuntix; 20.01.2012
comment
Вы имеете в виду, что фоновый цвет кнопки не изменился? Ну, я проверил это перед публикацией, как я упомянул в ответе. Это меняется. Хм, кстати, я пробовал это в среде LXDE, а не в GNOME. У меня сейчас нет доступа к GTK+3, возможно, я попробую проверить его в GNOME. - person another.anon.coward; 20.01.2012
comment
Я имею в виду, что тема окружения имеет эффект наведения, который меняет цвет фона. И на это изменение повлияло значение времени перехода в css, но оба значения цвета в css никак не повлияли на внешний вид кнопки. - person xubuntix; 20.01.2012
comment
Это может быть из-за темы, а также. Хотя я не слишком уверен. Как вы, возможно, знаете, существует файл .css по умолчанию, из которого можно выбрать элементы темы, если у темы есть файл .css. Может быть, вы можете попробовать другую тему, например, Clearlooks? - person another.anon.coward; 20.01.2012

Поместите переход на .button, а не на .button:hover

person Marco    schedule 11.01.2012
comment
это не работает и не будет работать так же, как в примере должен, потому что мне может понадобиться другой переход для других событий. - person xubuntix; 11.01.2012
comment
Это влияет на поведение. Реальное решение заключается в том, чтобы поместить анимируемое свойство в оператор css, например: transition: border-radius 3000ms linear; Конечно, это свойство может меняться, если у вас есть префиксы поставщиков. - person Marco; 11.01.2012
comment
@MatthewGreen: вы делаете видели, что я спрашивал о gtk? Это не имеет ничего общего с html, mozilla, webkit и прочими. Речь идет о наборе инструментов gtk. Пример, который я опубликовал, изменен отсюда. - person xubuntix; 11.01.2012