Sto provando a fare in modo che l'app legga i dati da un socket, ma ci vuole un po 'di tempo e blocca l'interfaccia, come faccio a rispondere agli eventi di tk mentre aspetto?Come eseguire gli eventi di replica di tkinter durante l'attesa dei dati del socket?
risposta
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).
- 1. Elenco di tutti gli eventi Tkinter
- 2. python - ripetizione di array numpy senza replica dei dati
- 3. TkInter keypress, eventi keyrelease
- 4. Come cassandra replica i dati
- 5. Controllo dei dati in NHibernate usando gli eventi
- 6. Errore durante la creazione degli argomenti di Kafka - Fattore di replica maggiore dei broker disponibili
- 7. Indicatore di occupato del browser durante il caricamento dei dati
- 8. Come ripulire gli eventi assegnati dal controller?
- 9. simula gli errori di socket
- 10. L'overrideredirect di Tkinter impedisce determinati eventi in Mac e Linux
- 11. La replica mySQL ha una coerenza immediata dei dati?
- 12. Come eseguire i checksum durante il trasferimento di file SFTP per l'integrità dei dati?
- 13. ImportError durante l'importazione di Tkinter in Python
- 14. Come bufferizzare gli eventi di streaming?
- 15. iPad Safari per mappare gli eventi del mouse per toccare gli eventi nelle mappe di immagini
- 16. Ottieni eventi del mouse all'esterno della finestra di Tkinter in Python
- 17. Come catturare gli eventi di visualizzazione ioni?
- 18. Server flask inviato eventi eccezione socket
- 19. Gli eventi touch di mappatura JavaScript per gli eventi del mouse
- 20. Evitare catene di eventi con dipendenze asincrone dei dati
- 21. Come leggere gli eventi dall'API di Google Analytics?
- 22. Come associare gli eventi di auto nel widget Testo di Tkinter dopo che sarà stato associato al widget Testo?
- 23. Controllo browser Web: come acquisire gli eventi del documento?
- 24. Python Socket riceve grandi quantità di dati
- 25. Come propagare gli errori e le eccezioni che si verificano durante l'associazione dei dati WPF?
- 26. L'esecuzione del crawler non ottiene gli stessi dati durante l'allenamento
- 27. Problema di socket durante l'utilizzo della filettatura
- 28. Passaggio di dati con eventi
- 29. Dati del pannello di conteggio dei dati R dati
- 30. Disabilitare gli avvisi durante l'installazione dei pacchetti di pip
Questa è una delle funzionalità davvero eccezionali di Tk: ottenere un evento quando un file può essere letto rende la gestione della presa molto semplice. –