文字起こしソフトをあれこれ調べていくうちに、自分が使いやすいツールを自作してみたくなったのでPythonで作ります。まずはGUIの基礎から。
The Python GTK+ 3 Tutorialにあるサンプルのコメントを翻訳して、実際にスクリプトを走らせて少しずつ覚えようと思います。 必要なライブラリやモジュールのインストールは、1. Installationで済ませてあります。
2.1. 簡単なサンプル
まずは小さなウィンドウを出すところから。
# tut02-01.py
# 01.簡単なサンプル
# 最初、GTK+のクラスや関数にアクセスできるようにするために、Gtkモジュールをインポートする必要があります。ユーザのシステムには複数のバージョンの GTK+ が同時にインストールされている可能性があるので、Gtk をインポートする際には GTK+ 3 を参照し、他のバージョンのライブラリを参照しないようにしておきます。
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
# 空のウィンドウを作成します。
win = Gtk.Window()
# GTK+では、イベントとはXサーバーからのメッセージのことです。イベントがウィジェットに到達すると、ウィジェットはシグナルを発してこのイベントに反応します。このシグナルには特定のコールバック(シグナルに反応するハンドラ関数)を接続することができます。
# ウィンドウを閉じるために x をクリックした場合にアプリケーションが終了するように、"destroy"シグナルとGtk.main_quit関数を接続します。
win.connect("destroy", Gtk.main_quit)
# ウィンドウを表示します。
win.show_all()
# GTK+処理ループを開始します。このループはウィンドウが閉じられたときに終了します。
Gtk.main()
このスクリプトを実行すると空のウィンドウが開きます。右角の☒を押すとプログラムが終了します。
2.2. クラスを使ったサンプル
Gtk.WindowクラスからサブクラスMyWindowを定義します。
# tut02-02.py
# 02. クラスを使ったサンプル
# もう少し便利なものとしては、古典的なプログラム「Hello World」のPyGObject版があります。
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
# この例は前のとは異なり、Gtk.Window をサブクラス化して独自の MyWindow クラスを定義しています。クラスのコンストラクタでは、スーパークラスのコンストラクタを呼び出す必要があります。
class MyWindow(Gtk.Window):
def __init__(self):
#プロパティタイトルの値をHello Worldに設定するように指示しています。
Gtk.Window.__init__(self, title="Hello World")
# 次の3行は、ボタンウィジェットを作成し、"clicked"シグナルと"on_button_clicked"メソッドを接続し、トップレベルのウィンドウに子として追加しています。
self.button = Gtk.Button(label="Click Here")
self.button.connect("clicked", self.on_button_clicked)
self.add(self.button)
# ボタンをクリックすると on_button_clicked() メソッドが呼び出されます。
# このメソッドはコンソールに"Hello World"という文字列を表示する働きを持ちます。
def on_button_clicked(self, widget):
print("Hello World")
# 最後のブロックはクラスの外側にあり、上記の01. 簡単なサンプルと非常に似ていますが、汎用的な Gtk.Window クラスのインスタンスを作成する代わりに MyWindow のインスタンスを作成します。
win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
このスクリプトを実行するとボタンを持つウィンドウが開きます。クリックするとコンソールに"Hello World"と出力されます。