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