GTK4: Clipboard

ビックリ、Fedora 36 に何故か Python2 が入っていた!

gimp

Gimp にくっ付いてきたのか、PyGtk まで。
てか Gimp で使う Python って 2 のままなのかよ。

そりゃ Gimp 自体が GTK2 だし。
GTK って今は GNU Tool Kit という意味だし。
もしかして開発止まっている?
別の SVG エディタを探すか、mac で探したほうがいいような。

ということで平日は軽く GTK4 でクリップボード。

#!/usr/bin/env python3

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

class Win(Gtk.ApplicationWindow):
    '''
        GTK4: Clipboard Copy and Peast
    '''
    def __init__(self, a):
        Gtk.ApplicationWindow.__init__(self, application=a)
        # Copy Button
        cbutton = Gtk.Button(label='Copy')
        cbutton.connect('clicked', self.on_button_c_clicked)
        # Paste Button
        pbutton = Gtk.Button(label='Paste')
        pbutton.connect('clicked', self.on_button_p_clicked)
        # Entry
        self.entry = Gtk.Entry()
        #pack
        box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        box.append(cbutton)
        box.append(pbutton)
        box.append(self.entry)
        self.set_child(box)

    def on_button_c_clicked(self, button):
        # entry text
        text = self.entry.get_buffer().get_text()
        clipboard = button.get_clipboard()
        clipboard.set(text)

    def on_button_p_clicked(self, button):
        clipboard = button.get_clipboard()
        clipboard.read_text_async(None, self.on_read_text_async)

    def on_read_text_async(self, clipboard, res):
        text = clipboard.read_text_finish(res)
        self.entry.get_buffer().set_text(text, -1)

def app_activate(a):
    w = Win(a)
    w.present()

app = Gtk.Application()
app.connect('activate', app_activate)
app.run()

文字列以外はあまり使わないと思うので文字列特化。

最初 init で文字列を入れようとしたけど全然駄目だった。
クリップボードは init を抜けてから操作しましょう。

GtkClipboard が GdkClipboard に代わっているけど GTK3 とほぼ同じ。
get_clipboard はどの Widget でもいいみたい、変な感じだけど。
set_text がバインドされていなくて戸惑うけど実はコレでいい。
読み込みは非同期にしないと上手くいかないみたい。

WordPress が 6.0 になった動作確認書き込みでした。