2010-07-27 41 views

回答

9

这很简单!而且你甚至不需要线程!但是你必须稍微调整你的I/O代码。 Tk相当于Xt的XtAddInput()调用,它允许您注册一个回调函数,该函数将在文件描述符上的I/O可能时从Tk mainloop调用。这里有您需要什么:

from Tkinter import tkinter 
tkinter.createfilehandler(file, mask, callback) 

该文件可能是一个Python文件或Socket对象(实际上,用的fileno()方法中的任何东西),或者是一个整数文件描述符。掩码是常量tkinter.READABLE或tkinter.WRITABLE之一。回调被称为如下:

callback(file, mask) 

当你做你必须注销回调,使用

tkinter.deletefilehandler(file) 

注:因为你不知道有多少字节可用于阅读,你不能使用Python文件对象的read或readline方法,因为这些方法会坚持读取预定义数量的字节。对于套接字,recv()或recvfrom()方法将正常工作;对于其他文件,请使用os.read(file.fileno(), maxbytecount).

+0

这是Tk的一个非常非常棒的功能 - 当可以读取文件使得套接字处理非常简单时,获取事件。 – 2010-07-28 15:57:39

相关问题