这篇文章讲网格
网格应该很好理解, 就是这样的
然后添加控件, 并为控件分布格子的大小
主要继承关系 Gtk.Grid < Gtk.Container < Gtk.Widget
如何创建一个Grid容器
通过实例化Gtk.Grid来创建一个Grid self.grid = Gtk.Grid()
Grid的使用
需要用到attach(child, left, top, width, height)
方法来放置控件, 有时会用到attach_next_to(child, sibling, position, width, height)
方法
- attach(child, left, top, width, height)
- child 子控件
- left, top 相当与平面直角坐标系, 以左上角为原点, 向右为x正方向, 向下为Y正方向, left就是X, top就是Y, 具体看下图
- width, height 子控件的宽和高
- attach_next_to(child, sibling, position, width, height)
- sibling 和 child, 这么说吧, 如果现在有一个按钮控件在grid里, 你想往里面放一个标签控件, 想把这个放到按钮的右边, 那么child就是你准备放的控件, sibling就是基于的控件, 比如在这里基于按钮, 放在右边 就可以写attach_next_to(self.label, self.button, Gtk.PositionType.RIGHT, width, height)
- position 方向, 接受Gtk.PositionType
Gtk.PositionType 枚举类型
Gtk.Position.LEFT = 0 左
Gtk.Position.RIGHT = 1 右
Gtk.Position.TOP = 2 上
Gtk.Position.BOTTON = 3 下
示例
-
3 x 3
Example -
原始码实现
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class MyWindow(Gtk.Window):
def __init__(self):
super(MyWindow, self).__init__(title="Hello")
self.grid = Gtk.Grid()
self.add(self.grid)
self.btn1 = Gtk.Button(label="Button 1")
self.btn2 = Gtk.Button(label="Button 2")
self.btn3 = Gtk.Button(label="Button 3")
self.label = Gtk.Label(label="Im a label")
self.grid.attach(self.btn1, 0, 0, 2, 1)
self.grid.attach_next_to(self.btn2, self.btn1, Gtk.PositionType.BOTTOM, 2, 1)
self.grid.attach_next_to(self.label, self.btn1, Gtk.PositionType.RIGHT, 1, 2)
self.grid.attach_next_to(self.btn3, self.btn2, Gtk.PositionType.BOTTOM, 3, 1)
win = MyWindow()
win.show_all()
win.connect("destroy", Gtk.main_quit)
Gtk.main()
Run
Grid的常用属性
- column_homogeneous 列是否等宽
- row_homogeneous 行是否等高
- column_spacing 列之间间隔
- row_spacing 行之间间隔
- border_width 边框大小
常用方法
- insert_column(int) 插入列, int是第几列
- remove_column(int) 移除列, int是第几列
- insert_row(int) 插入行, int是第几行
- remove_column(int) 移除行, int是第几行
- set_column_homogeneous(bool) 不用说了吧, 就是设置属性的, 把set变为get表示获取该属性
- set_row_homogeneous(bool)
- set_row_spacing(int)
- set_column_spacing(int)
- get_child_at(left, top) 根据left, top值获取该位置上的控件
常用信号
- 参考上一篇文章(都是重复的)
之后 可能 会讲一个简单的计算器的实现
欢迎留言, 下一篇文章讲解notebook 容器
网友评论