Gtk(Gjs) Tips
# 最終更新日 2023.11.19
GtkWindow
正直 GUI を作るなら PyGObject のほうが圧倒的に簡単 GTK4(Python) Tips ということで基本だけ書いておきます
#!/usr/bin/gjs -m /** * 複数のバージョンがある場合は指定が必要 */ import 'gi://Gtk?version=4.0'; /** * 必要な Gir をインポートする */ import GObject from 'gi://GObject'; import Gtk from 'gi://Gtk'; import System from 'system'; /** * ウインドウクラスの登録、言語の class という意味では無い * GObject.registerClass は何も考えずこう書く * 継承は必ず var 宣言で行う必要がある */ var MyWindow = GObject.registerClass({ GTypeName: 'MyWindow' }, class MyWindow extends Gtk.ApplicationWindow { /** * 初期化は constructor ではなく _init を使う */ _init(app) { /** * 継承の場合は親クラスの _init を呼ぶ * _init や new の引数はプロパティをオブジェクト形式で指定 */ super._init({ application: app, title: 'はろー Gjs!' }); /** * 変数は基本的に let 宣言で行う * 後で呼び出す場合は this.button と this にくっつける */ let button = new Gtk.Button({ label: 'ボタンを押してみてね(_B)', use_underline: true }); /** * シグナルハンドラを無名関数で行う場合はアロー関数にする * function() で書くと this が呼び出し元に変わってしまう */ button.connect('clicked', (widget)=> { if (widget.label == 'ハローワールド!') this.title = 'ハローワールド!' else widget.label = 'ハローワールド!'; }); /** * add は set_child になりました、child プロパティに代入でもいい */ this.child = button; /** * Widget はデフォルトが「表示」になり show() は廃止されました * 非表示にしたい Widget がある場合には visible プロパティにて */ //this.show_all(); } }); /** * アプリケーションクラスの作成、Gtk.main 関数は廃止されたので必ず必要 * メインループを受け持ち管理するウインドウが無くなると終了します */ var MyApplication = GObject.registerClass({ GTypeName: 'MyApplication' }, class MyApplication extends Gtk.Application { _init() { super._init(); } /** * オーバーライドは * [ vfunk_メソッド名 ] * で予約されているので上書き注意 */ vfunc_activate() { let window = new MyWindow(this); } }); /** * 実行、argv の指定はこうする */ let app = new MyApplication(); app.run([System.programInvocationName].concat(ARGV));
Copyright(C) sasakima-nao All rights reserved 2002 --- 2024.