2010-07-27 2 views

답변

9

그게 쉽습니다! 그리고 당신은 스레드가 필요조차 없습니다! 그러나 I/O 코드를 약간 재구성해야합니다. Tk는 Xt의 XtAddInput() 호출과 같은 기능을 가지고 있습니다.이 호출을 통해 파일 설명자에서 I/O가 가능할 때 Tk 메인 루프에서 호출 할 콜백 함수를 등록 할 수 있습니다. 여기에 당신이 필요로하는 작업은 다음과 같습니다

from Tkinter import tkinter 
tkinter.createfilehandler(file, mask, callback) 

파일은 파이썬 파일이나 소켓 객체 (실제로, fileno() 메쏘드를 가진 모든 것), 또는 정수 파일 기술자 일 수도있다. 마스크는 tkinter.READABLE 또는 tkinter.WRITABLE 상수 중 하나입니다. 다음과 같이 콜백이 호출됩니다 당신이 읽을 수있는 얼마나 많은 바이트 당신을 알고하지 않기 때문에 :

tkinter.deletefilehandler(file) 

주를 사용하여 작업을 완료 할 때 콜백의 등록을 취소해야한다

callback(file, mask) 

, 파이썬 파일 객체의 읽기 또는 readline 메소드는 미리 정의 된 바이트 수를 읽어야하기 때문에 사용할 수 없습니다. 소켓의 경우 recv() 또는 recvfrom() 메서드는 정상적으로 작동합니다. 다른 파일들에 대해서는 os.read(file.fileno(), maxbytecount).

+0

Tk의 정말 훌륭한 기능 중 하나입니다. 파일을 읽을 수있을 때 이벤트를 받으면 소켓 처리가 매우 쉽습니다. –

관련 문제