Gtkチュートリアル第8章は Entry です。
8. エントリー
エントリウィジェットでは、ユーザがテキストを入力することができます。Gtk.Entry.set_text() メソッドで内容を変更したり、Gtk.Entry.get_text() メソッドで現在の内容を読み込んだりすることができます。また、Gtk.Entry.set_max_length() メソッドを呼び出すことで、エントリで使用できる文字数を制限することもできます。
エントリウィジェットを読み取り専用にしたいこともあるでしょう。これは Gtk.Entry.set_editable() メソッドに False を渡すことで実現できます。
エントリーウィジェットは、ユーザーからパスワードを取得するためにも使用できます。パスワードを第三者に知られないようにするために、エントリーに入力された文字を非表示にするのが一般的です。Gtk.Entry.set_visibility() を False で呼び出すと、テキストが非表示になります。
Gtk.Entry には、テキストの後ろに進捗状況やアクティビティ情報を表示する機能があります。これは Gtk.ProgressBar ウィジェットに似ていて、ページのダウンロードがどの程度完了したかを表示するためにウェブブラウザでよく見られます。エントリにこのような情報を表示させるには、Gtk.Entry.set_progress_fraction() 、Gtk.Entry.set_progress_pulse_step() 、または Gtk.Entry.progress_pulse() を使用します。
さらに、エントリーは両側にアイコンを表示することができます。これらのアイコンは、クリックでアクティブ・ドラッグソースとして設定・ツールチップを持つなどのことができます。アイコンを追加するには、Gtk.Entry.set_icon_from_icon_name() を使うか、アイコン名、pixbuf(画像をロードするライブラリ)、アイコンのテーマからアイコンを設定する他の様々な機能のいずれかを使います。アイコンにツールチップを設定するには、Gtk.Entry.set_icon_tooltip_text() か、マークアップに対応する機能を使用します。
8.1. 例
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib
class EntryWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Entry Demo")
self.set_size_request(200, 100)
self.timeout_id = None
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
self.add(vbox)
self.entry = Gtk.Entry()
self.entry.set_text("Hello World")
vbox.pack_start(self.entry, True, True, 0)
hbox = Gtk.Box(spacing=6)
vbox.pack_start(hbox, True, True, 0)
self.check_editable = Gtk.CheckButton("Editable")
self.check_editable.connect("toggled", self.on_editable_toggled)
self.check_editable.set_active(True)
hbox.pack_start(self.check_editable, True, True, 0)
self.check_visible = Gtk.CheckButton("Visible")
self.check_visible.connect("toggled", self.on_visible_toggled)
self.check_visible.set_active(True)
hbox.pack_start(self.check_visible, True, True, 0)
self.pulse = Gtk.CheckButton("Pulse")
self.pulse.connect("toggled", self.on_pulse_toggled)
self.pulse.set_active(False)
hbox.pack_start(self.pulse, True, True, 0)
self.icon = Gtk.CheckButton("Icon")
self.icon.connect("toggled", self.on_icon_toggled)
self.icon.set_active(False)
hbox.pack_start(self.icon, True, True, 0)
def on_editable_toggled(self, button):
value = button.get_active()
self.entry.set_editable(value)
def on_visible_toggled(self, button):
value = button.get_active()
self.entry.set_visibility(value)
def on_pulse_toggled(self, button):
if button.get_active():
self.entry.set_progress_pulse_step(0.2)
# Call self.do_pulse every 100 ms
self.timeout_id = GLib.timeout_add(100, self.do_pulse, None)
else:
# Don't call self.do_pulse anymore
GLib.source_remove(self.timeout_id)
self.timeout_id = None
self.entry.set_progress_pulse_step(0)
def do_pulse(self, user_data):
self.entry.progress_pulse()
return True
def on_icon_toggled(self, button):
if button.get_active():
icon_name = "system-search-symbolic"
else:
icon_name = None
self.entry.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, icon_name)
win = EntryWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()