如何在等待套接字数据时生成tkinter repond事件?

时间:2010-07-27 23:21:24

标签: python event-handling tkinter

我正在尝试让应用程序从套接字读取数据,但是需要一些时间并锁定接口,如何让它在等待时响应tk事件?

1 个答案:

答案 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).