5
我试图让应用程序从套接字读取数据,但它需要一些时间并锁定接口,我如何使它在等待时响应tk事件?如何在等待套接字数据时进行tkinter响应事件?
我试图让应用程序从套接字读取数据,但它需要一些时间并锁定接口,我如何使它在等待时响应tk事件?如何在等待套接字数据时进行tkinter响应事件?
这很简单!而且你甚至不需要线程!但是你必须稍微调整你的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).
这是Tk的一个非常非常棒的功能 - 当可以读取文件使得套接字处理非常简单时,获取事件。 – 2010-07-28 15:57:39