2010-07-27 4 views

risposta

9

Questo è facile! E non hai nemmeno bisogno di discussioni! Ma dovrai ristrutturare un po 'il tuo codice I/O. Tk ha l'equivalente della chiamata XtAddInput(), che consente di registrare una funzione di callback che verrà chiamata dal mainloop Tk quando I/O è possibile su un descrittore di file. Ecco quello che vi serve:

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

Il file può essere un file Python o oggetto socket (in realtà, tutto ciò con un metodo fileno()), o di un descrittore di file intero. La maschera è una delle costanti tkinter.READABLE o tkinter.WRITABLE. La funzione di callback si chiama come segue:

callback(file, mask) 

È necessario annullare la registrazione del callback quando hai finito, utilizzando

tkinter.deletefilehandler(file) 

Nota: dal momento che non si sa quanti byte sono disponibili per la lettura, è non è possibile utilizzare i metodi di lettura o readline dell'oggetto file Python, poiché questi insistono sulla lettura di un numero predefinito di byte. Per i socket, i metodi recv() o recvfrom() funzioneranno correttamente; per altri file, utilizzare os.read(file.fileno(), maxbytecount).

+0

Questa è una delle funzionalità davvero eccezionali di Tk: ottenere un evento quando un file può essere letto rende la gestione della presa molto semplice. –

Problemi correlati