2015-05-25 7 views
5

Creare un gioco di tic-tac-toe molto semplice in Python utilizzando un'architettura P2P con socket. Attualmente la mia GUI ha un pulsante che dice "Crea" che si aprirà e disegnerà una nuova finestra della bacheca di gioco, creerà un socket, legherà, ascolterà e accetterà una connessione. Il pulsante "Partecipa" si aprirà, disegnerà un nuovo tabellone e si connetterà a quel "server".Python: Mostra messaggio "In attesa di lettore ..." mentre il socket ascolta la connessione

Sto provando a farlo visualizzare un messaggio che dice 'Attesa per giocatore ...' quando si crea un gioco, un pulsante di annullamento per interrompere e tornare al menu principale, e farlo sparire sul proprio se una connessione è stata accettata.

Ho provato a utilizzare tkMessageBox ma lo script si interrompe finché l'utente non cancella il messaggio, quindi non c'è modo per me di ascoltare/accettare fino a quando l'utente non preme qualcosa.

Quale altro modo c'è per me per realizzare questo?

Grazie!

+0

Forse aggiungere una cornice nel frattempo e distruggerla quando accetta? – Zizouz212

+0

Ho deciso di aprire una finestra con un'etichetta e un pulsante e distruggerlo. Sembrava funzionare, ma ora il problema è che, mentre ascolta le connessioni, l'intera finestra si blocca e quindi non puoi fare clic sul pulsante Annulla .... hmm. Ci sto ancora lavorando. – Bapho

risposta

1

Sembra un problema di threading.

Non ho familiarità con la grafica TK, ma immagino che quello che devi fare è avviare la finestra mostrando il messaggio "in attesa del giocatore". Quella finestra quindi scorre in attesa che accada qualcosa.

Quando viene visualizzata la finestra di messaggio, è necessario eseguire l'"ascolto" su un altro thread, che riporta alla casella del messaggio principale quando qualcuno è connesso utilizzando un semaforo o una coda.

Sul tuo thread GUI principale è necessario rendere il ciclo:

  1. controllo della coda o del semaforo per i valori. Se c'è un valore che ti aspetti, chiudi la scatola. Questo dovrebbe essere non-bloccante in modo che il thread della GUI possa ancora verificare l'input dell'utente.
  2. controllare l'input dell'utente. Questo probabilmente è fatto usando le funzioni di callback.
+0

Avevo paura che sarebbe stata la risposta ... È ora di esaminare i thread. Grazie! – Bapho

+0

@Bapho non fatevi prendere dal panico, non sono * tutti * così male! Hai solo bisogno di guardare i tempi e i segnali e starai bene. –

Problemi correlati