Tkinter & socket question
Gregory A. Landrum
landrum at foreman.ac.rwth-aachen.de
Sat Jun 19 06:18:46 EDT 1999
>2) I need to poll the connection periodically, say, every second. This would
>not have been a problem in console mode... I don't know how to do this in a
>Tkinter environment though. So, how can I do something every second (or every
>n milliseconds, or whatever the time span may be)? Are threads the way to go?
>I haven't used them before.
Wow, a question I can answer.... amazing.
Obligatory-Mandatory-Necessary-Essential Disclaimer: I bear no
resemblance whatsoever to a python wizard, I just happen to have done
something like what you want to do. There's almost definitely a
better way of doing this, but my method seems to work.
I assume that you have already opened a nonblocking socket connection,
and that that is what you are polling. Your main Tkinter window has a
method called "after" which can be used to do the polling.
Documentation can be found at:
http://www.pythonware.com/library/tkinter/introduction/x8550-alarm-handlers-and-other.htm
An example, in my stupid little networked python game, I have the
following polling function:
def ListenForMessages(self):
msg = None
theConn = None
# Check to see if we are the client or the server
if self.serverActive == 1:
if self.clientConn is None:
print "No Client!"
return
theConn = self.clientConn
elif self.clientActive == 1:
theConn = self.socket
if theConn is None: return
# see if there is anything there to read
try:
msg = theConn.recv(1024)
# Got it! Dispatch the message.
self.Dispatch(self.message.Type(msg),msg)
except error:
# nope... no one loves us.
pass
# re-register the after callback, with a 200msec delay
self.listenID = self.Game.rootWin.after(200,self.ListenForMessages)
The last line is important, because the after callback is removed
after being called. So it needs to be re-registered with Tk.
The callback is first registered immediately upon establishing the
socket connection.
I hope this helps,
-greg
--
---------------------
Dr. Greg Landrum (landrumSPAM at foreman.ac.rwth-aachen.de)
Institute of Inorganic Chemistry
Aachen University of Technology
More information about the Python-list
mailing list