The following example illustrates some of the many ways you can use the
GTextEntry.
import sys
import Tkinter
from grail.widgets import *
from grail import rtv
from grail import objsignal
from grail import const
def onnewvarvalue():
s = var.tostring()
s = s[1:]+s[:1]
var.fromstring(s)
def onnewvarvalue2(d):
sys.stdout.write("2nd in chain!\n")
def onchange(val):
sys.stdout.write("onchange: %s\n" % (val))
def onreturn(e):
sys.stdout.write("onreturn: " +`e` + "\n")
def ondisable():
te.disable()
def onenable():
te.enable()
root = gwidgetinit()
root.title("Demo - GTextEntry")
top, bottom = gtools.splitframe(root)
var = rtv.StringRTV(value='This is a test!', name="__gtextentry test")
te = GTextEntry(top, width=35, text='you stink!', rtv=var)
te.pack(expand=1, fill=Tkinter.X, anchor='nw')
Tkinter.Button(top, text="new var value!", command=onnewvarvalue).pack()
disablebutton = Tkinter.Button(top, text='disable', command=ondisable)
disablebutton.pack()
enablebutton = Tkinter.Button(top, text='enable', command=onenable)
enablebutton.pack()
objsignal.listen(var, const.sigON_CHANGE, None, onnewvarvalue2)
objsignal.listen(te, const.sigON_CHANGE, None, onchange)
objsignal.listen(te, const.sigON_RETURN, None, onreturn)
te.component('default').bind("<Return>", onreturn)
vars = (rtv.IntegerRTV(name="__gtextentry_integer_test"),
rtv.FloatRTV(name="__gtextentry_float_test"),)
texts = ("integer: ", "float: ",)
labels = gtools.makewidgets(bottom, GLabel, len(texts), list_text=texts)
entries = gtools.makewidgets(bottom, GTextEntry, len(vars), list_rtv=vars)
gtools.stdwidgetcolumns(labels, entries)
root.mainloop()