月別アーカイブ: 2024年11月

コスモス

大口某所のコスモス畑が満開でした。
先週の花公園では茎が折れていましたがこちらは無事です。

cosmos

赤い花なので今回は LUMIX G99 を持って。
元メイン機なのに使い方のほとんどを忘れているのって怖い。

cosmos

でも使いやすさには定評がある LUMIX なのですぐに馴染む。
赤桃白がくっきり、LUMIX の赤はやっぱりイイね。

cosmos

レンズは M.Zuiko 12-40 というあまり見ない組み合わせ。
問題ないどころか解像スゲェ、中古でゴロゴロあるレンズなのに。

cosmos

コスモスは単体の花で見ると別に綺麗ではないんだけど。
大きく多色な花が密集して咲くのがいい、薔薇と真逆かな。

cosmos

この組み合わせでもよくあるツマラナイ写真も撮れます。
ボケが主役で花が引き立て役です、レンズのレビューですか?
マイクロフォーサーズだってここまでボケさせることができる。
やらないだけです、いや高感度耐性は評判どおりですけど。

コゲラ

macOS Sequoia を 15.1 にアップデート。
OM SYSTEM の RAW(*.ORF) のサムネイルバグが修正されました。

前々回にヤルと書いた Adw のページ書き換えました。
AboutDialog は継承元を変えるだけでほとんど同じでした。

GTK4(Python) Tips | Adw – Paepoi

お知らせ以上、今日は公園へ。
留鳥しかいなかったし天気が厳しかった。

kogera

コゲラ、すべて -2ev 状態で iso3200 になってしまいました。
なので更に AI ノイズリダクションを掛けています。

mejiro

メジロ、-2ev の技を知らなきゃ塗り絵だったなって。
もしくは盛大な被写体ブレ、どっちも修正なんて無理だ。

yamagara

ヤマガラ、条件が悪くてもこれくらいはという例でした。
AI ノイズリダクションが無い環境だと、今じゃありえない。
とりあえず一日ムダになってしまうより全然いいよね。

クサシギ

本日は快晴、よし今日こそジョウビタキのオスを撮るぞい。
ってメスすら出ない、筆者の前にちっとも出てくれない。

kusashigi

代わりに本日もクサシギがいた、なんと二羽もおる。
筆者が知らないだけで今までも普通に来ていたのかな。

kawasemi

カワセミは遠かった、まあメスだとはっきり判る程度には。
久々にホバリングをしてくれたけどピントが合わず。

mozu

モズのメスがミミズらしきものを食っています。
フォーカス激甘だけどこんなのしかいなかったので。

olympus blue

午後は花公園へ移動、そういえばコスモスの時期だった。
近影は茎が倒れて酷いことになっていたので風景写真風に。

jyoubitaki

やっと見つけたジョビ男、オリンパスブルーバックありがとう。
この公園は毎年オスが縄張りにするのを覚えていてよかった。

ちなみに小牧の某公園等はオスになったりメスになったり。
毎年バトルして勝ったほうが住み着くみたいです。

ベニマシコを昨年見た場所にも行ったけど、舗装工事をしてる。
今年はダメかな、まあまだカシラダカも来ていないようだし。
野鳥撮影が捗る季節ですがどうなることやら。

Adw.AlertDialog

本日は休日出勤無しだが雨、野鳥撮影ヤメにしてプログラミングでも。
とりあえず Adw.AlertDialog を試しに書いてみることにした。

#!/usr/bin/env python3

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

class Win(Adw.ApplicationWindow):
    '''
        Gtk.ApplicationWindow is Gtk-CRITICAL
        Widget of type “AdwAlertDialog” already has an accessible role of type “GTK_ACCESSIBLE_ROLE_GENERIC”
    '''
    def __init__(self, a):
        # Set Adwaita Style
        manager = Adw.StyleManager.get_default()
        manager.set_color_scheme(Adw.ColorScheme.DEFAULT)
        # init
        Adw.ApplicationWindow.__init__(self, application=a)
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        # Header
        title = Adw.WindowTitle(title='test')
        header = Adw.HeaderBar(title_widget=title)
        vbox.append(header)
        for s in ('Simple', 'Yes No', 'Vertical'):
            # Button
            button = Gtk.Button(label=s)
            button.connect('clicked', self.on_button_clicked, s)
            vbox.append(button)
        # self
        self.set_content(vbox)
        self.set_default_size(600, 500)

    def on_button_clicked(self, button, text):
        match text:
            case 'Simple':
                alert = Adw.AlertDialog(body='Same for ESC')
                alert.add_response('close', 'OK')
                alert.present(self)
            case 'Yes No':
                alert = Adw.AlertDialog(body='Close to the Edge')
                # add_responces is no...
                alert.add_response('close', 'No')
                alert.add_response('yes', 'Yes')
                alert.set_response_appearance('yes', Adw.ResponseAppearance.SUGGESTED)
                alert.choose(self, None, self.on_dialog_responce)
            case 'Vertical':
                alert = Adw.AlertDialog(heading='Head', body='body', prefer_wide_layout=True)
                alert.add_response('close', 'Cancel')
                alert.add_response('no', 'Destroy this document')
                alert.add_response('ok', 'Save this document')
                alert.set_response_appearance('ok', Adw.ResponseAppearance.SUGGESTED)
                alert.set_response_appearance('no', Adw.ResponseAppearance.DESTRUCTIVE)
                alert.choose(self, None, self.on_dialog_responce)
            case _:
                alert = Adw.AlertDialog(body='???')
                alert.add_response('close', 'ok')
                alert.present(self)

    def on_dialog_responce(self, alert, res):
        text = alert.choose_finish(res)
        match text:
            case 'ok':
                print('Saved')
            case 'no':
                print('Discarded')
            case 'yes':
                print("You're a fan of Yes")
            case 'close':
                print('Oh my good!')

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

GtkAlertDialog

Gtk.ApplicationWindow から呼び出ししても普通に動くんだけど。
Gtk-CRITICAL エラーを stdout に吐くのを気にしなければ、ですけど。
素直に Adw.ApplicationWindow から呼び出したほうが無難。

それと呼び出し Window より Dialog のほうが大きいと Warning になる。
ボタンは基本が横並びで横幅がはみ出しする場合は自動的に縦並びになる。
強制縦並びにしたければ prefer-wide-layout プロパティで可能。

id の文字列は日本語でも使えた、Python だからかもだけど。
外国人も検索で来るかもだからここでは英語にしましたけど。

Adw.MessageDialog 同様に Widget を載せることもできる。
gnome-text-editor で変更破棄すればどんな感じなのかは見れます。

Adw も洗練された Widget という謳い文句らしくなってきましたね。
というのを Kate というダサい Qt のエディタで書いているのがなんとも。
gnome-text-editor に拡張機能付けてくれないかなぁ、見た目はいいのに。
スニペットのショートカット挿入と html のエスケープ機能だけでもいいのに。