#!/usr/bin/env python """ very light isa hmi mockup prog de test infrastructure ivy + mini ihm type isa """ import traceback, time, os, sys, string, getopt from Tkinter import * from ivycpy import * APPNAME = "vl_isa" def lprint(fmt,*arg): print APPNAME + ": " + fmt % arg def usage(scmd): lpathitem = string.split(scmd,'/') fmt = '''Usage: %s [-h] [-b IVYBUS | --ivybus=IVYBUS] [-n APPNAME | --name=APPNAME] where \t-h provides the usage message; \t-n APPNAME | --name=APPNAME \t-b IVYBUS | --ivybus=IVYBUS allow to provide the IVYBUS string in the form \t adresse:port eg. 127.255.255.255:2010 ''' print fmt % lpathitem[-1] def oncxproc(connected): if connected == IvyApplicationDisconnected : lprint("an IvyApplication was Disconnected") else: lprint("an IvyApplication was Connected") def ondieproc(id): lprint("we ask me to die with id [%d]", id ) class TopLevel(Tk) : __single = 0 def __init__(self,appname = "TopLevel"): if TopLevel.__single != 0 : lprint("TopLevel is singleton") sys.exit(1) __single = 1 # the object is tk_root Tk.__init__(self) self.appname = appname self.title(self.appname) # Frame contenant heure et bouton quit self.tkFheadpanel = Frame(self) # Label hour self.tkLhour = Label(self.tkFheadpanel,text="hh:mm:ss") self.tkLhour.pack(padx=4 , pady=4 , side = LEFT) # dummy button ## self.tkBdummy = Button(self.tkFheadpanel, ## text="dummy", bg='pink') ## self.tkBdummy.pack(padx=4 , pady=4, side = RIGHT) # button quit self.tkBquit = Button(self.tkFheadpanel, text="QUIT", bg='pink', command=self.quit) self.tkBquit.pack(padx=4 , pady=4, side = RIGHT) self.tkFheadpanel.pack(side=TOP) # Frame contenant un Label, un Text et un Scroller self.tkFreceive_msg = Frame(self) # label self.tkLreceive_msg = Label(self.tkFreceive_msg, text="flyingonthebus") self.tkLreceive_msg.pack(padx=4 , pady=4, side=TOP, fill = BOTH, expand = YES) # Text self.tkTreceive_msg = Text(self.tkFreceive_msg, height=26, width=50) # Scrollbar self.tkSBreceive_scroller = Scrollbar( self.tkFreceive_msg, command = self.tkTreceive_msg.yview) self.tkTreceive_msg.configure( yscrollcommand = self.tkSBreceive_scroller.set) self.tkTreceive_msg.pack(padx=4 , pady=4, side=LEFT, fill = BOTH, expand = YES) self.tkSBreceive_scroller.pack(side=RIGHT, fill = Y) self.tkFreceive_msg.pack(side=BOTTOM, fill = BOTH, expand = YES) def add_one_msg(self, smsg) : self.tkTreceive_msg.insert(END, "%s\n" % smsg ) def onmsgproc(self,*arg) : self.add_one_msg(string.join(arg,"")) def quit(self): # cleanup action before detroying tk_root lprint("doing IvyStop") IvyStop() lprint("doing destroy" ) self.destroy() lprint("after destroy") lprint("done.") ## def ontick(self): ## lprint("on tick method") ## IvySendMsg("testtk_tick") ## self.after(1000,self.ontick) # main prog if __name__ == '__main__': # setting some main variable sivybus = "" # getting option try: optlist, left_args = getopt.getopt(sys.argv[1:],'hb:n:', ['ivybus=','name']) except getopt.GetoptError: # print help information and exit: usage(sys.argv[0]) sys.exit(2) for o, a in optlist: if o in ("-h", "--help"): usage(sys.argv[0]) sys.exit() elif o in ("-b", "--ivybus"): sivybus = a elif o in ("-n","--name"): APPNAME = a if sivybus != "" : sechoivybus = sivybus elif os.environ.has_key("IVYBUS"): sechoivybus = os.environ["IVYBUS"] else: sechoivybus = "ivydefault" lprint("Ivy will broadcast on %s " , sechoivybus) # initializing ivy : isreadymsg sisreadymsg = "[%s is ready]" % APPNAME IvyInit(APPNAME, sisreadymsg, 1 , oncxproc, ondieproc ) IvyStart(sivybus) # initializing top hmi part mytoplevel = TopLevel("%s top window" % APPNAME) # doing suited binding IvyBindMsg(mytoplevel.onmsgproc , "(.*)") mytoplevel.mainloop()