Python GTK 3 GUI 编程 -- 005 容器#3

2020-12-06  本文已影响0人  bokerr

这篇文章讲下自适应盒子

简单来说, 就是一个盒子里有非常多个子控件, 这个盒子会根据窗口大小自动调整每行控件的数量.


Flowbox 1 Flowbox 2

flowbox需要放在一个可滚动的窗口(Gtk.ScrolledWindow)中
否则Flowbox会因为空间不足而超过你的屏幕, 就像这样


Failed Flowbox

Gtk.ScrolledWindow -> 继承自Gtk.Bin, 也是容器的一种, 这个比较像窗口, 里面只能放一个子控件, 如果子控件的显示区域不足, 他就会自动添加一个滚动条(Scroll bar)来显示全部内容
使用方法 直接 使用add(child) 方法来添加子控件, 下面会用到

如何创建一个Flowbox

实例化Gtk.Flowbox self.flowbox = Gtk.Flowbox()
添加控件只需要 self.flowbox.add(child) 就可以了

示例

Flowbox 1

原始码实现

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="Flowbox")

        self.flowbox = Gtk.FlowBox(max_children_per_line=30)
        self.scroll_window = Gtk.ScrolledWindow()
        self.scroll_window.add(self.flowbox)
        self.flowbox_child_create(self.flowbox)
        self.add(self.scroll_window)

    def flowbox_child_create(self, flowbox):
        for i in range(0, 50):
            flowbox.add(Gtk.Button(label=f"{i}"))

win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

如果不想让子控件填充至全窗口
加一个valign的属性
self.flowbox = Gtk.FlowBox(max_children_per_line=30, valign=Gtk.Align.START)
效果是这样的


再看看上面的图, 找下区别

常用属性

Gtk.SelectionMode 枚举类型
NONE = 0 无法选择
SINGLE = 可以有0个或1个被选择
BROWSE = 必须有一个被选择
MULTIPLE = 可以选择多个

常用方法

常用信号

欢迎大家留言, 下篇文章讲下堆叠容器(stack)和堆叠切换器(stack switch) 我不知道这个控件的中文是什么, 所以翻译可能有点怪, 哈哈

上一篇下一篇

猜你喜欢

热点阅读