응용 프로그램에서 소켓에서 데이터를 읽으려고하는데 시간이 걸리고 인터페이스가 잠겨 있습니다. 기다리는 동안 tk 이벤트에 어떻게 응답합니까?소켓 데이터를 기다리는 동안 tkinter repond 이벤트를 만드는 방법은 무엇입니까?
5
A
답변
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).
관련 문제
- 1. 다운로드 된 데이터를 기다리는 패턴
- 2. Actionscript 3 및 mxml ... 이벤트를 기다리는 동안 차단
- 3. 이벤트를 실행하는 동안 텍스트를 전달하는 방법은 무엇입니까?
- 4. specman의 이벤트 목록에서 한 이벤트를 기다리는 방법은 무엇입니까?
- 5. base64Binary 데이터를 만드는 방법은 무엇입니까?
- 6. C에서 소켓 데이터를 읽는 버퍼를 만드는 방법
- 7. callOut에서 MKmapview에서 이벤트를 만드는 방법은 무엇입니까?
- 8. MKMapView의 터치 이벤트를 만드는 방법은 무엇입니까?
- 9. 동적 컨트롤 및 이벤트를 만드는 방법은 무엇입니까?
- 10. Tkinter 버튼을 윈도우와 같은 색으로 만드는 방법은 무엇입니까?
- 11. Tkinter : 시스템 트레이 응용 프로그램을 만드는 방법은 무엇입니까?
- 12. java : datainputstream : 데이터를 기다리는 동안 읽기 호출이 프로세서 시간을 차지합니까?
- 13. TcpListener를 사용하여 데이터를 보내고 응답을 기다리는 방법은 무엇입니까?
- 14. mysqldump를 사용하는 동안 데이터를 암호화하는 방법은 무엇입니까?
- 15. EDT에서 결과를 기다리는 방법은 무엇입니까?
- 16. 효과가 끝날 때까지 jQuery를 기다리는 방법은 무엇입니까?
- 17. SystemClock.sleep()과 Semaphore 루프를 기다리는 동안 Thread.sleep()
- 18. MySQL : 데이터를 다양하게 만드는 방법은 무엇입니까?
- 19. 단위 테스트를위한 더미 데이터를 만드는 방법은 무엇입니까?
- 20. JSON 응답 데이터를 동적으로 만드는 방법은 무엇입니까?
- 21. WCF 서비스를 기다리는 가장 좋은 방법은 무엇입니까?
- 22. Emacs Lisp 함수에서 이벤트를 기다리는 방법?
- 23. 이미지를 표시하는 동안 실버 라이트 버튼을 투명하게 만드는 방법은 무엇입니까?
- 24. 파이썬에서 glib.Source를 만드는 방법은 무엇입니까?
- 25. 유닉스 소켓 : 하나의 "보내기"통화로 큰 데이터를 보내는 방법은 무엇입니까?
- 26. 소켓 서버에서 aspx 페이지로 데이터를 보내는 방법은 무엇입니까?
- 27. ajax 업데이트를 기다리는 동안 jquery를 정렬 할 수 없게하는 방법은 무엇입니까?
- 28. Silverlight 소켓 서버의 단위 테스트를 만드는 방법은 무엇입니까?
- 29. WCF를 사용하여 소켓 (바이너리) 서버를 만드는 방법은 무엇입니까?
- 30. (ruby) ruby 소켓 : POST 요청을 만드는 방법은 무엇입니까?
Tk의 정말 훌륭한 기능 중 하나입니다. 파일을 읽을 수있을 때 이벤트를 받으면 소켓 처리가 매우 쉽습니다. –