日別アーカイブ: 2022/12/03

GTK4: Adw.Clamp

前回まで Widget 配置を中心にするのに margin_*** を使っていた。
Nautilus の設定ウインドウを参考にしたのですけど、何か違うなって。

リサイズすると普通に伸び縮み、ある一定のサイズ以上になると固定される。
どうやら Adw.Clamp でこのような動作にできるようだ。

#!/usr/bin/env python3

import gi
gi.require_version('Gtk', '4.0')
gi.require_version('Adw', '1')
from gi.repository import Gtk, Adw

class Win(Gtk.ApplicationWindow):
    '''
        Adw: Sample Code
    '''
    def __init__(self, a):
        # Set Adwaita Style
        manager = Adw.StyleManager.get_default()
        manager.set_color_scheme(Adw.ColorScheme.DEFAULT)
        # init
        Gtk.ApplicationWindow.__init__(self, application=a)
        # Round Button
        pills = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
        pills.append(Gtk.Button(label='pill', css_classes=['pill']))
        pills.append(Gtk.Button(label='circular', css_classes=['circular']))
        # Button and Entry
        buttons = [
            Gtk.Button(label='nomal'),
            Gtk.Button(label='flat', css_classes=['flat']),
            Gtk.Button(label='suggested', css_classes=['suggested-action']),
            Gtk.Button(label='destructive', css_classes=['destructive-action']),
            pills,
            Gtk.Entry(placeholder_text='success', css_classes=['success']),
            Gtk.Entry(placeholder_text='warning', css_classes=['warning']),
            Gtk.Entry(placeholder_text='error', css_classes=['error'])
        ]
        # pack
        box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) #, margin_start=48, margin_end=48)
        for b in buttons:
            box.append(b)
        # Clamp
        clamp = Adw.Clamp(maximum_size=300, tightening_threshold=200)
        clamp.set_child(box)
        self.set_child(clamp)
        self.set_default_size(400, 400)

app = Gtk.Application()
app.connect('activate', lambda a: Win(a).present())
app.run()

前回のを書き換え。
margin 指定をヤメて Adw.Clamp を利用にしてみたのでリサイズしてみよう。
なるほど、中心配置はコレを使ったほうがいいな。

tightening-threshold はしきい値ということだけど。
指定値以下にはならないと思って縮めてみたら違った。

clamp

正直指定しても意味ない、コンテンツ最小サイズまで縮められる。
多分内部的な値なのだろう、てか最小サイズプロパティが欲しいかも。