我正在尝试让应用程序从套接字读取数据,但是需要一些时间并锁定接口,如何让它在等待时响应tk事件?
答案 0 :(得分:9)
这很容易!你甚至不需要线程!但是你必须重新调整你的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文件对象的读取或读取方法,因为这些方法将坚持读取预定义的字节数。对于套接字,recv()或recvfrom()方法可以正常工作;对于其他文件,请使用os.read(file.fileno(), maxbytecount).