基础
1 | import gi |
GTK+ 采用事件驱动编程模型。用户无操作时 GTK+ 处于主循环(main loop)等待输入,有动作输入时唤醒并将事件传递给 GTK+。
控件收到一个事件通常会发出一个或多个信号,信号触发连接的函数。这种函数通常称为回调(callbacks)。回调函数通常会执行相关操作,完成之后返回主循环。
1 | handler_id = widget.connect("event", callback, data) |
widget 是之前创建的控件实例。每个控件有它特定的事件。比如按钮被点击触发一个信号。callback 是回调函数名。data 参数包含信号发送时传递的数据,可选。
函数返回一个数字,代表特定的 信号-回调 对。不需要之后需要与信号断开连接,保证回调函数不再被调用。
1 | widget.disconnect(handler_id) |
如果丢失了 handler_id(比如使用 Gtk.Builder.connect_signals() 安装 handler),断开指定回调:
1 | widget.disconnect_by_func(callback) |
几乎所有应用顶层窗口都连接到“delete-event”事件。点击关闭,信号默认行为是销毁窗口,而不中止程序。需使用:
1 | window.connect("delete-event", Gtk.main_quit) |
Gtk.main_quit() 使得 Gtk.main() 中的主循环 return。
属性
属性描述控件的配置和状态。控件有它自己特定的一组属性。如按钮属性“label”在按钮内包含一个文本标签控件。
1 | label = Gtk.Label(label="Hello World", angle=25, halign=Gtk.Align.END) |
以上代码和下列语句等效:
1 | label = Gtk.Label() |
不使用 getter 和 setter 来设置的话,也可以使用控件的 props 属性设置,如 widget.props.prop_name = value。这个语句和 widget.get_property(“prop-name”) 以及 widget.set_property(“prop-name”, value) 等效。
通过 dir 可以查看控件可用的属性,下面在终端窗口列出 Gtk.Box 的属性。
1 | widget = Gtk.Box() |
字符串的处理(Python 3)
Python 3.x 中的字符串
Python 3 中所有字符串都存储为 Unicode 形式,str 类型。编码过的字符串以二进制数据的表示形式存储到 bytes 类型。概念上来说,str 指文本,bytes 指数据。str 到 bytes 转换使用 str.encode(),反之 bytes.decode()。
Unicode 字符串和编码后的字符串也不能够混合了,会导致 TypeError:
1 | "Fu\u00dfb\u00e4lle" text = |
GTK+ 中的 Unicode
Python 3.x 中字符串更加简单明了,在给方法传递或方法返回字符串时,PyGObject 会自动从或编码/解码到 UTF-8。字符串,或者说文本,总是以 str 实例的方式展现:
1 | from gi.repository import Gtk |
参考链接: Python GTK+ 3 Tutorial