#!/usr/bin/env python """ programme de test de ivycpy en mode boucle tk """ import traceback, time, os, sys, string, getopt from Tkinter import * from ivycpy import * IVYAPPNAME = "pytesttk" def lprint(fmt,*arg): print IVYAPPNAME + ": " + fmt % arg def usage(scmd): lpathitem = string.split(scmd,'/') fmt = '''Usage: %s [-h] [-b IVYBUS | --ivybus=IVYBUS] where \t-h provides the usage message; \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] global hellobindingid hellobindingid = -1 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 Text et un Scroller self.tkFreceive_msg = Frame(self) # 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 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) def oncxproc(connected): if connected == IvyApplicationDisconnected : lprint("an IvyApplication was Disconnected") else: lprint("an IvyApplication was Connected") def ondieproc(id): lprint("On die proc id=%d", id ) def onhelloproc(*larg): sargs = string.join(larg,":") sresult = "On , i reply " % (larg[0], larg[0]) mytoplevel.add_one_msg(sresult) # lprint("[%s]" % sresult IvySendMsg("goodday %s" % (larg[0])) def onmsgproc(*larg): sresult = "On msg proc : arg number = %d , arglist = %s" % \ (len(larg), string.join(larg,":")) mytoplevel.add_one_msg(sresult) # abonnement selectif def oncmd(*larg): global hellobindingid lprint("hb =%d", hellobindingid) lprint("cmd [%s] larg0=%s", string.join(larg,":"), larg[0]) if larg[0] == 'bindhello' : if hellobindingid == -1 : hellobindingid = IvyBindMsg(onhelloproc,"^hello (.*)") lprint("binding hello id = %d ", hellobindingid) elif larg[0] == 'unbindhello' : if hellobindingid != -1 : lprint("unbinding hello id = %d ", hellobindingid) IvyUnBindMsg(hellobindingid) hellobindingid = -1 elif larg[0] == 'getlist' : sapplist = IvyGetApplicationList() lprint("app list return %s" , sapplist) for sapp in string.split(sapplist): lprint("app name [%s] host [%s] ", sapp, IvyGetApplicationHost(IvyGetApplication(sapp))) lprint(IvyGetApplication(sapp)) elif larg[0] == 'senddie' : sapplist = IvyGetApplicationList() lprint("app list return %s", sapplist) for sapp in string.split(sapplist): lprint("sending die to %s ", sapp) IvySendDieMsg(IvyGetApplication(sapp)) elif larg[0] == 'senderror' : sapplist = IvyGetApplicationList() lprint("app list return %s" , sapplist) for sapp in string.split(sapplist): lprint("sending error to %s " , sapp) IvySendError(IvyGetApplication(sapp),0, "error msg to %s from %s" % (sapp,IVYAPPNAME)) # print "[%s]" % sresult # IvySendMsg("a recu et renvoi [%s]" % sargs) def ontick(): lprint("ontick") IvySendMsg("testtk_tick") if __name__ == '__main__': # initializing ivybus and isreadymsg sivybus = "" sisreadymsg = "[%s is ready]" % IVYAPPNAME # getting option try: optlist, left_args = getopt.getopt(sys.argv[1:],'hb:', ['ivybus=']) 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 if sivybus != "" : sechoivybus = sivybus elif os.environ.has_key("IVYBUS"): sechoivybus = os.environ["IVYBUS"] else: sechoivybus = "ivydefault" lprint("Ivy will broadcast on %s " , sechoivybus) mytoplevel = TopLevel("%s top window" % IVYAPPNAME) # myinterface = SocketInt(mytoplevel, delay = 2.0, iter = 5) sisreadymsg = "%s is ready" % IVYAPPNAME lprint("IvyApplicationConnected is %s " , IvyApplicationConnected) lprint("IvyApplicationDisconnected is %s " , IvyApplicationDisconnected) IvyInit(IVYAPPNAME, sisreadymsg, 1 , oncxproc, ondieproc ) IvyStart(sivybus) bindingid = IvyBindMsg(onmsgproc, "([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (.*)") # "(.*)") # lprint("IvyBindMsg retourne %d" , bindingid ) bindingid = IvyBindMsg(oncmd, "^\.(.*)") # "(.*)") # lprint("IvyBindMsg retourne %d", bindingid) # timerid = IvyTimerRepeatAfter(10,1000,ontick) # print("IvyTimerRepeatAfter retourne %d" % timerid mytoplevel.after(1000,mytoplevel.ontick) lprint("tk mainloop") mytoplevel.mainloop()