pygtkで遊ぼう(1)  gtk.Window編

さてさて、今日から不定期でpython + pygtkをつかったプログラムを書いていこうと思います。
なにぶんにも我流なので、ツッコミどころ満載だとは思いますが、気がついたことがあれば
どんどんツッコミを入れてやってください(笑い。

尚、pygtkのドキュメントはダウンロード可能ですので、お手元においておくとよいでしょう。
英語ですが、とても重宝しますよ。
ダウンロードは ここ から入手できます。
また、チュートリアルは ここ から入手できます。


さて、最初は退屈な内容かもしれませんが、ご容赦ください。

今回はウインドウを作ってみます。

まずソースコードは以下の通りです。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import pygtk
if sys.platform != 'win32':
    pygtk.require('2.0')
import gtk


#
#
class simpleWindow:
    ##
    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_border_width(2)
        self.window.set_size_request(400, 300)

        self.window.connect('delete_event', self.on_quit)

        self.window.show_all()
        
        gtk.main()

    ##
    def on_quit(self, widget, event=None, data=None):
        print '-- quit --'
        gtk.main_quit()
        return False


#
#
def main():
    wind = simpleWindow()
    

#
#
if __name__ == '__main__':
    main()

上記のスクリプトを実行すると、こんな感じになります。

さて、それではソースの頭のほうから説明していこうと思います。

必要なモジュールのインポート

import sys
import pygtk
if sys.platform != 'win32':
    pygtk.require('2.0')
import gtk

上記の部分では、gtkとpygtkを使用するために必要なモジュールをインポートしています。
決まり文句のようなものなので、特にこれといってないのですが、

pygtk.require('2.0')

の部分、これはWindows環境では不要らしいので、このようにしてあります。

ウインドウクラス

class simpleWindowの部分はウインドウを表示するためのクラスです。
今回のような単純な例では特にクラスにする必要はないのですが、今後、今回のウインドウをベースに
ソースを拡張していこうと思っていますので、クラスにしておきました。

    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_border_width(2)
        self.window.set_size_request(400, 300)

        self.window.connect('delete_event', self.on_quit)

        self.window.show_all()
        
        gtk.main()

上記はウィンドウクラスの初期化関数(コンストラクタ)になります。
この関数では

GTKのウインドウを生成してサイズを幅400pix,高さ300pixに設定。

self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_border_width(2)
self.window.set_size_request(400, 300)

イベントハンドラを設定

self.window.connect('delete_event', self.on_quit)

ここでは、ウインドウが閉じられた際に実行すべき関数としてsimpleWindowクラスのメソッドであるon_quitを設定しています。

ウインドウの表示

self.window.show_all()

対象のウインドウを表示させるだけであれば、self.window.show()でもよいのですが、ウインドウ上にあるウィジェットも含めて全てを一括で表示するようにしたいのでshow_all()を呼び出しています。

GTKのイベントループを開始

gtk.main()

これを忘れてはいけません!(笑
これは、GTKのイベントループを開始させます。ウインドウの描画などの処理もイベントループが開始していなければ実行されません。

on_quitメソッド

この関数のやっていることは非常に単純です。gtk.quit_main()を呼び出し、GTKのイベントループを停止させます。
この関数の戻り値はブール型になっています。この値、つまり「delete_event」に関連づけられた関数が返すブール値は何を表すのかというと、「閉じられたウインドウを保持するかどうか」を表しています。
●Trueの場合、閉じられたウインドウは保持されます。
●Flaseの場合、閉じられたウインドウは破棄されます。

次回はボタンなどを配置してみようと思います。

つづく。