2010-07-27 83 views

回答

9

這很簡單!而且你甚至不需要線程!但是你必須稍微調整你的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).

+0

這是Tk的一個非常非常棒的功能 - 當可以讀取文件使得套接字處理非常簡單時,獲取事件。 – 2010-07-28 15:57:39

相關問題