python的一大优点是能够对方法和函数进行内省.举个例子,要获得函数签名,math.log你可以(在ipython中)运行:
In [1]: math.log?
Type: builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form: <built-in function log>
Namespace: Interactive
Docstring:
log(x[, base])
Return the logarithm of x to the given base.
If the base not specified, returns the natural logarithm (base e) of x.
Run Code Online (Sandbox Code Playgroud)
并查看该功能的参数x和可选项base.
使用新的gtk3和自动生成的pygobject绑定,我可以在所有示例中尝试只获取(*args, **kwargs)每个gtk方法的参数.
示例:Label.set_text 需要一个字符串:
In [1]: from gi.repository import Gtk
In [2]: mylabel = Gtk.Label("hello")
In [3]: mylabel.set_text?
Type: instancemethod
Base Class: <type 'instancemethod'>
String Form: …Run Code Online (Sandbox Code Playgroud) 使用新的gtk,可以使用类似css的文件创建图形主题.
给定这个css文件(命名my-gtk-widgets.css):
.button {
border-radius: 0;
border-style: solid;
}
.button:hover {
transition: 3000ms linear;
border-radius: 50;
}
Run Code Online (Sandbox Code Playgroud)
以下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()
Run Code Online (Sandbox Code Playgroud)
运行此代码会提供一个按钮,可在悬停时更改边框半径.但过渡是即时的,而不是动画.


这是什么原因?我需要不同版本的gtk,python,......?或者这个动画是否依赖于gtk主题(在我的情况下是Ubuntu默认值Ambience)?或者我的css文件中有什么问题?
python版本:2.7.2+
gtk版本:3.0
编辑:该示例是修改后的版本此