Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么悬停动画会忽略Gtk3中的过渡时间和功能?_Python_Css_Animation_Gtk_Gtk3 - Fatal编程技术网

Python 为什么悬停动画会忽略Gtk3中的过渡时间和功能?

Python 为什么悬停动画会忽略Gtk3中的过渡时间和功能?,python,css,animation,gtk,gtk3,Python,Css,Animation,Gtk,Gtk3,使用新的gtk,可以用css之类的文件创建图形主题 给定此css文件(名为my gtk widgets.css): 以及以下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)

使用新的gtk,可以用css之类的文件创建图形主题

给定此css文件(名为
my gtk widgets.css
):

以及以下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默认的
环境
)?或者我的css文件中有什么错误

python版本:2.7.2+

gtk版本:3.0


编辑:该示例是一个修改版本的

将转换置于
上。按钮
而不是
。按钮:悬停
我不是css专家,但似乎您试图在无法应用转换/动画的属性上应用转换(从它看来,
边界半径上的转换
不受支持)您可以尝试使用类似于
背景色的方法来查看应用程序中按钮的过渡效果(可以看到颜色变化过渡-Gtk-3.0、python-2.7.1、FC15)


希望这有帮助

这既不起作用,也不会像示例中应该做的那样,因为我可能希望其他事件有不同的转换。它确实会影响行为。真正的解决方案实际上是将可设置动画的属性放入css语句中,如下所示:
transition:border radius 3000ms linear当然,当您有供应商前缀时,此属性可能会有所不同。@MatthewGreen:您看到我问过gtk吗?这与html、mozilla、webkit和其他无关。这是关于gtk工具包的。我贴的例子是。谢谢你的回答。但是,这也不起作用:当背景过渡时间相应地改变时,背景颜色不会被拾取(例如边框颜色、填充顶部等等)。因此,我最初的问题仍然是:我必须改变什么才能让它起作用?css似乎不是主要问题。你是说按钮的背景色没有改变吗?嗯,正如我在回复中提到的,我在发帖前确实检查过。它确实改变了。嗯,顺便说一句,我在LXDE环境中试过了&不是GNOME。我现在没有访问GTK+3的权限,也许我会尝试在GNOMEI上检查它,这意味着氛围主题确实有一个改变背景颜色的悬停效果。这一变化受到css中过渡时间值的影响,但css中的两个颜色值对按钮的外观没有任何影响。这可能也是因为主题。不过我不太确定。您可能知道,有一个默认的.css文件,如果主题有.css文件,则可以从中选择主题元素。也许你可以尝试一个不同的主题也许是Clearlooks?
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()
.button {
    background-color: #00ffff;
    border-style: solid;
}

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