Inter process communication using Tk/send hangs on suspended processes
Rob W. W. Hooft
rob at hooft.net
Tue Feb 15 08:27:09 EST 2000
I have a group of python programs. Whenever any new program is started,
it will try to establish connections to each of the other ones
using Tk/send (it is asking each for their background color, and will
choose a new one for itself). This is done using "root=setup.setup()",
the setup module is appended to this message.
The problem occurs when any pre-existing program has been suspended:
in such a case the Tk/send does not return. I also can not seem to set
a timeout on the communications (my attempts are in commented
code). Are there any better suggestions?
Regards,
Rob Hooft.
--------------------------------------------------------------------
#
__version__ = '$Id: setup.py,v 1.9 1999/08/04 09:16:21 hooft Exp $'
#
# GUI Startup
#
# (C) Rob W.W. Hooft, Nonius BV, 1997--1999
#
import os,signal
import Tkinter,Pmw
TclError=Tkinter.TclError
bgcolors=["grey85","#DFF","#DDF","#FDF","#FDD","#FFD","#DFD"]
#def timeouthandler(sig,frame):
# print "WARNING: no response from other Tk application."
# raise TclError
def usedcolors(root):
used=[]
names=list(root.winfo_interps())
names.sort()
names.reverse()
for name in names:
try:
#signal.signal(signal.SIGALRM,timeouthandler)
#signal.alarm(3)
root.send(name, 'winfo name .')
#signal.alarm(0)
#signal.signal(signal.SIGALRM,signal.SIG_DFL)
except TclError:
# Inoperative window -- ignore it
pass
else:
try:
col=root.send(name,'no-bgcolor')
used.append(col)
except:
pass
return used
def setscheme(root):
try:
bgcolor=os.environ['NONIUS_BGCOLOR']
Pmw.Color.setscheme(root,background=bgcolor)
except KeyError:
# Now sample all others, and see what is in use. Choose a new one.
u=usedcolors(root)
for col in :
if col in u:
continue
break
else:
print "No free background color"
col="grey85"
Pmw.Color.setscheme(root,background=col)
root.tk.createcommand('no-bgcolor',lambda bgcolor=col: bgcolor )
os.environ['NONIUS_BGCOLOR']=col
def setup(idle=1):
import Tkinter,Pmw
Pmw.initialise(fontScheme='Pmw1',size=14)
root=Tkinter._default_root
setscheme(root)
import balloon # Automatically initializes...
# Set up idle task calls for "checkifcanceled"....
if idle:
import projtls
projtls._ltt.setidletask(root.update)
return root
--
===== rob at hooft.net http://www.xs4all.nl/~hooft/rob/ =====
===== R&D, Nonius BV, Delft http://www.nonius.nl/ =====
===== PGPid 0xFA19277D ========================== Use Linux! =========
More information about the Python-list
mailing list