pygtk覚え書き gtk.Entry

gtk.Entryがクリックされた場合に、自動的にEntry内のテキストを全て選択する方法。
以下のようにします。

下記のスクリプトを実行すると、2つのEntryをもつウインドウが表示されます。
それぞれのEntryにテキストを入力したあと、Entryをクリックすると、入力されているテキストが
選択されるのが確認できます。

# -*- coding : utf-8 -*-

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


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

        self.wind.connect('delete_event', self.__on_quit)

        vbox = gtk.VBox()
        entry = gtk.Entry()
        entry.connect('event', self.__on_entry_clicked)
        vbox.pack_start(entry)
        
        entry = gtk.Entry()
        entry.connect('event', self.__on_entry_clicked)
        vbox.pack_start(entry)

        self.wind.add(vbox)
        self.wind.show_all()
        
        gtk.main()

    def __on_entry_clicked(self, widget, event, data=None):
        if event.type == gtk.gdk.BUTTON_RELEASE:
            widget.select_region(0, -1)

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


def main():
    wind = simpleWindow()

if __name__ == '__main__':
    main()


上記のサンプルのポイントとなるのは

gtk.Entryのクリック操作をハンドリングするには'event'シグナルにconnectする。
・eventシグナル発生時に自分の期待するイベント(今回の場合にはMouseUP)かどうか判定し、処理を行う。
gtk.Entryのテキストを選択するには、select_region()を使用する。

といったところです。