4

使用新的 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+

gtk 版本:3.0

编辑:这个例子是这个的修改版本

4

2 回答 2

6

我不是 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;
}

希望这可以帮助!

于 2012-01-18T17:48:36.337 回答
-1

.button不进行过渡.button:hover

于 2012-01-11T16:13:40.610 回答