Sekirei

今日の五条川。
夏にヒマワリ畑だった大口某所がコスモス畑になっていました。

1

大量の秋桜と秋の五条川桜並木、狙ったような洒落ができる。
カメラ女子も沢山、一眼で花を撮っている女性ってなんかいいですね。
いや若い娘も定番だったオリンパスペンの人もいないけど。

2

よしよし今回もセイヨウミツバチがきてくれた。
欲を言えば日本ミツバチが来て欲しいけどここらにいない。
さて花はこれくらいにして。

3

その近くではカワラヒワの群が住み着いているようで。
ってなんか一匹だけ違うのがいるぞ。

4

あれ?どう見てもジョウビタキのメスなんですけど。
もう来ているのか、あぁ冬が来るって感じ。

以下画質は悪いけど。

5

ハクセキレイ、いつもはスルーするけど。

6

セグロセキレイ、ほぼ同じ所にってあれ?

7

キセキレイまで、おまえら縄張り争いしないのか!

8

ついでみカワセミ、川底にいるのって目面しい。
てかおまえ歩けたのか、初めて歩いているのを見た。
以上ほぼ同じ場所で、こんなこともあるんだなって。

GTK4 main loop

GTK4 は PyGObject ばかりやっていたけど。
たまには Gjs もやろうかなって、gir なのは同じなんだけど。

gjs/gtk4-template.js at master ? GNOME/gjs ? GitHub

あれ?
GtkApplication を使わないでイケる方法があったんだ。
同様なはずなので PyGObject で書いてみる。

#!/usr/bin/env python3

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

class TestWindow(Gtk.Window):
    def __init__(self):
        Gtk.ApplicationWindow.__init__(self)
        btn = Gtk.Button(label='The best camera for wild birds')
        btn.connect('clicked', self.on_button_clicked)
        self.label = Gtk.Label(label='...')
        box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        box.append(btn)
        box.append(self.label)
        self.set_child(box)
        #self.connect('delete-event', self.on_close_request) # v3
        self.connect('close-request', self.on_close_request)
        self.present()

    def on_button_clicked(self, widget):
        self.label.set_text('MICRO FOUR THIRDS !')

    def on_close_request(self, widget):
        loop.quit()

loop = GLib.MainLoop.new(None, False)
#GLib.set_prgname('LUMIX')
TestWindow()
loop.run()

mft

GMainLoop でも良かったようです、知らなかった。

でも何故かこの方法ではタイトルバーに何も表示されないね。
アプリ名表示は使っていないはずの GtkApplication になる、なんだかな。
ウインドウを作る前に g_set_prgname すればいいんだけどさ。

GtkApplication を使えば今までどおりファイル名が表示される。
いや application-id を指定するとそちらが優先されるみたい。
g_set_prgname 無指定の場合だけの話ですけど。

close-request は delete-event の名前が変わっただけです。
×ボタンを押したよってシグナル、destroy は破棄されたよってシグナル。
GtkApplication を使う場合はこんな処理いりませんからね。

しかしのんびりしている間に GNOME 41 が出てしまった。

GNOME 41 Release Notes

Multitasking って GSettings で変更できていたジャン。
GUI 設定が付いただけ、いや筆者はデフォルトで使うけど。
それよりランチャを左に戻す設定が欲しい、macOS でも左にしているんだ。
ちなみに普段は隱して三本指スワイプでランチャを出す GNOME3 式で使っている。

The GTK Project

GTK の stable は 4.2.1 か、こっちは今までどおり奇数が開発版なのか。
でもドキュメントは 4.5 かよ、バージョンの関連性がもうよくワカラン。

関係ないけどサンプルコードでカメラネタはやっぱりイマイチだ。
やっぱりスズキのバイクが一番だなって。

cosmos

こんな小春日和の、おだやかな日は。

cosmos

秋桜って背が高いだけでそこいらにある花って感じだよね。
なのに山口百恵をはじめ合唱曲になったり宇宙の別名になったり。
オオハルシャギクという本名のほうは無名なのに。

google

てか Google レンズのおかげで筆者も今日知ったんだが。
でもショウキズイセンだとヒガンバナと間違えてくれました。

pink

五条川では今はオキザリス?が綺麗です。
でも雑草、こんなに綺麗なのに。

mozu

今日の、いや昨日の五条川。

月曜の夕方に投稿しようとしたらサーバーが落ちていた。
十年以上さくらを利用しているけど障害発生メールが届いたのは初めて。
まあ復旧したのでそれはよくて夜勤明けの今頃ですが。

kosamebitaki

コサメビタキ、今回は綺麗に撮れた。
いや桜の枝は掛かってしまったけど。

mozu1

モズ、やはり枝が。
久々に見たけど夏はどこにいっていたのやら。

mozu2

モズ、だから枝が邪魔。
メスだし上と同じ場所にいたので多分夫婦。

mozu3

別の所でまたしてもモズ、今日はあちこちで鳴いている。
冬に向けた縄張り作り争いの真っ最中なのかな。

samebitaki

サメビタキ、だと思う。
目の前にある白線の下が暗色なので多分。

コサメビタキ・エゾビタキ・サメビタキの識別

思うんだけど当のヒタギ達は見分けられているんだろうか?
キビタキとルリビタキのメスなんてまったく違いが解らないし。
人間には解らない要素があるんだろう、知らんけど。

今後ブログ用写真は Lightroom 書き出しを(小)で。
これって切り出しでサイズダウンしたものより容量は小さくなるのね。
(小)でも拡大しないかぎり原寸との違いが解らん。

どうでもいいけど筆者は Python では鈴菌ネタを使っているけど。
カメラネタにし変更したほうがいいかな、マジどうでもいいけど。

GTK4 Clipboard (String)

GTK4 で Clipboard を使うテスト。
文字列のコピペはできた、ただし自分のインスタンス内のみで。

#!/usr/bin/env python3

import gi
gi.require_version('Gtk', '4.0')
#gi.require_version('Gdk', '4.0') # not need
from gi.repository import Gtk, Gdk

class TestWindow(Gtk.ApplicationWindow):
    '''
        GTK4 Clipboard @ String Copy
        This Code is Instance Only
    '''
    def __init__(self, app):
        Gtk.ApplicationWindow.__init__(self, application=app)
        self.clip = self.props.display.get_primary_clipboard()
        print(self.clip) #=> GdkWaylandPrimary (GdkClipboard)
        '''
        self.clip = self.get_clipboard()
        self.clip = self.props.display.get_clipboard()

        display = Gdk.Display.get_default()
        self.clip = display.get_primary_clipboard()
        self.clip = display.get_clipboard()

        # local is All True...
        print(self.clip.props.local)
        '''
        self.clip.set('スズキのバイクはカッコイイ')
        print(self.clip.get_formats().to_string()) #=> { gchararray, text/plain;charset=utf-8, text/plain }
        #
        #self.clip.set_text('No GIR Binding') # Error!
        #
        self.clip.read_text_async(None, self.read_text_async_cb)
        #
        self.label = Gtk.Label(label='Motor Cycle')
        self.set_child(self.label)
        self.set_default_size(400, 100)
        self.present()

    def read_text_async_cb(self, clip, res):
        text = clip.read_text_finish(res)
        self.label.set_label(text)

class TestApplication(Gtk.Application):
    def __init__(self):
        Gtk.Application.__init__(self, application_id='org.suzuki.katana')

    def do_activate(self):
        TestWindow(self)

app = TestApplication()
app.run()

clip

何をどうやっても local Property が True になってしまう。
False にしないと Gedit 等の外部インスタンスとはコピペできない。
バグなのか?
他にやらないといけないことがあるのか?

それと set_text 等がバインドされていないのはどうなんだ?
set で文字列を渡したら普通にセットできたけど「ん?」って感じ。
バイナリの転送は GdkContentProvider でいいのかな?