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

car*_*ips 5 python tkinter event-handling

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

car*_*ips 9

多数民众赞成容易!你甚至不需要线程!但是你必须重新调整你的I/O代码.Tk具有相当于Xt的XtAddInput()调用,它允许您注册一个回调函数,当在文件描述符上可以进行I/O时,该函数将从Tk主循环调用.这就是你需要的:

from Tkinter import tkinter
tkinter.createfilehandler(file, mask, callback)
Run Code Online (Sandbox Code Playgroud)

该文件可能是Python文件或套接字对象(实际上,任何带有fileno()方法的文件)或整数文件描述符.掩码是常量tkinter.READABLE或tkinter.WRITABLE之一.回调调用如下:

callback(file, mask)
Run Code Online (Sandbox Code Playgroud)

使用完毕后,您必须取消注册回调

tkinter.deletefilehandler(file)
Run Code Online (Sandbox Code Playgroud)

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