
from gi.repository import Gtk
from gi.repository import Gdk

window = Gtk.Window()
window.connect('destroy', Gtk.main_quit)

class EntryWithInstructions(Gtk.Entry):
    def __init__(self, instructionText):
        Gtk.Entry.__init__(self)
        self.set_text(instructionText)
        self.originalFG = self.get_style().fg[Gtk.StateType.NORMAL]
        self.modify_fg(Gtk.StateType.NORMAL, Gdk.Color.parse('#C0C0C0')[1])
        self.instructionText = instructionText
        self.connect('focus-in-event', self.on_focus_in)
        self.connect('focus-out-event', self.on_focus_out)

    def on_focus_in(self, widget, event):
        if Gtk.Entry.get_text(self) == self.instructionText:
            self.set_text('')
            self.modify_fg(Gtk.StateType.NORMAL, self.originalFG)

    def on_focus_out(self, widget, event):
        if Gtk.Entry.get_text(self) == '':
            self.set_text(self.instructionText)
            self.modify_fg(Gtk.StateType.NORMAL, Gdk.Color.parse('#C0C0C0')[1])

    def get_text(self):
        text = Gtk.Entry.get_text(self)
        return text if text != self.instructionText else ''

table = Gtk.Table(rows=2, columns=2, homogeneous=False)
window.add(table)

label = Gtk.Label('Full Name: ')
table.attach(label, 0, 1, 0, 1,
             xoptions=Gtk.AttachOptions.FILL, yoptions=0, xpadding=0, ypadding=0)
table.attach(EntryWithInstructions('enter using format First Last'), 1, 2, 0, 1,
             xoptions=Gtk.AttachOptions.FILL|Gtk.AttachOptions.EXPAND,
             yoptions=0, xpadding=0, ypadding=0)
label.set_alignment(1.0, 1.0)

label = Gtk.Label('Phone Number: ')
table.attach(label, 0, 1, 1, 2,
             xoptions=Gtk.AttachOptions.FILL, yoptions=0, xpadding=0, ypadding=0)
table.attach(EntryWithInstructions('enter using format 123-456-7890'), 1, 2, 1, 2,
             xoptions=Gtk.AttachOptions.FILL|Gtk.AttachOptions.EXPAND,
             yoptions=0, xpadding=0, ypadding=0)
label.set_alignment(1.0, 1.0)


window.show_all()
Gtk.main()


