ex_hello.py
import patterns
import mywidgets
import time
class HelloFunctor(object):
def __call__(self, observer):
if observer.Subject.text == 'Hello World':
observer.Subject.text = 'Goodbye World'
else:
observer.Subject.text = 'Hello World'
class QuitFunctor(object):
def __init__(self):
self.done = False
def __call__(self, observer):
self.done = True
factory = mywidgets.TkWidgetFactory()
hello_button = factory.button(text='Hello World')
quit_button = factory.button(text='Quit')
factory.window().contents = [
hello_button,
'\n',
quit_button,
]
quit = QuitFunctor()
patterns.CallbackObserver(hello_button, HelloFunctor())
patterns.CallbackObserver(quit_button, quit)
while not quit.done:
time.sleep(.1)
factory.do_quit() # FIXME: this seems out of place
Generated by GNU enscript 1.6.3.
|
|
ex_multiply.py
import patterns
import mywidgets
import time
from PIL import Image
def float_or_zero(x):
try: return float(x)
except: return 0.0
class UserInterface(object):
def __init__(self, factory):
self.input_a = factory.edit(text='0')
self.input_b = factory.edit(text='0')
self.result = factory.label(text='0')
self.quit_button = factory.button(text='Quit')
self.kill_gui_func = factory.do_quit
factory.window().contents = [
Image.open('i-want-gnu.png'),
factory.table(contents = [
[ 'this', self.input_a ],
[ 'times this', self.input_b ],
[ 'equals this', self.result ],
]),
'\n',
self.quit_button,
]
class Facade(object):
def __init__(self, gui):
self.done = False
self.gui = gui
patterns.CallbackObserver(self.gui.input_a, self.input_updated)
patterns.CallbackObserver(self.gui.input_b, self.input_updated)
patterns.CallbackObserver(self.gui.quit_button, self.do_quit)
def do_quit(self, subject):
self.done = True
self.gui.kill_gui_func()
def input_updated(self, subject):
a = float_or_zero(self.gui.input_a.text)
b = float_or_zero(self.gui.input_b.text)
self.gui.result.text = str(a * b)
def main():
factory = mywidgets.TkWidgetFactory()
gui = UserInterface(factory)
facade = Facade(gui)
while not facade.done:
time.sleep(.2)
if __name__ == '__main__': main()
Generated by GNU enscript 1.6.3.
|
|