【发布时间】:2010-07-27 23:21:23
【问题描述】:
我正在尝试让应用程序从套接字读取数据,但它需要一些时间并锁定接口,我如何让它在等待时响应 tk 事件?
【问题讨论】:
标签: python event-handling tkinter
我正在尝试让应用程序从套接字读取数据,但它需要一些时间并锁定接口,我如何让它在等待时响应 tk 事件?
【问题讨论】:
标签: python event-handling tkinter
这很容易!你甚至不需要线程!但是你必须稍微重构你的 I/O 代码。 Tk 与 Xt 的 XtAddInput() 调用等效,它允许您注册一个回调函数,当文件描述符上可以进行 I/O 时,该回调函数将从 Tk 主循环中调用。这是您需要的:
from Tkinter import tkinter
tkinter.createfilehandler(file, mask, callback)
文件可能是 Python 文件或套接字对象(实际上,任何具有 fileno() 方法的对象),或整数文件描述符。掩码是常量 tkinter.READABLE 或 tkinter.WRITABLE 之一。回调调用如下:
callback(file, mask)
您必须在完成后取消注册回调,使用
tkinter.deletefilehandler(file)
注意:由于您不知道有多少字节可供读取,因此您不能使用 Python 文件对象的 read 或 readline 方法,因为它们会坚持读取预定义的字节数。对于套接字,recv() 或 recvfrom() 方法可以正常工作;对于其他文件,请使用os.read(file.fileno(), maxbytecount).
【讨论】:
WSAAsyncSelect(),它准确地将套接字准备就绪通知传递给 GUI