2015-05-25 3 views
5

In Python ein sehr einfaches Tic-Tac-Toe-Spiel mit einer P2P-Architektur mit Sockets erstellen. Momentan hat meine GUI eine Schaltfläche mit dem Namen 'Erstellen', die öffnet und ein neues Spielbrettfenster zeichnet, einen Socket erstellt, eine Verbindung herstellt, zuhört und eine Verbindung akzeptiert. Der Button "Join" öffnet sich und zeichnet ein neues Spielfeld und verbindet sich mit diesem "Server".Python: Zeige die Nachricht 'Waiting for player ...', während der Socket auf die Verbindung wartet

Ich versuche, eine Nachricht mit dem Text "Warten auf den Player ..." anzuzeigen, wenn Sie ein Spiel erstellen, eine Abbrechen-Schaltfläche, um zu stoppen und zum Hauptmenü zurückzukehren, und es auf eigene Faust verschwinden zu lassen Eine Verbindung wurde akzeptiert.

Ich habe versucht mit tkMessageBox, aber das Skript stoppt, bis der Benutzer die Nachricht löscht, so gibt es keine Möglichkeit für mich zu hören/zu akzeptieren, bis der Benutzer etwas drückt.

Welche andere Möglichkeit gibt es für mich, dies zu erreichen?

Danke!

+0

Vielleicht fügen Sie einen Rahmen in der Zwischenzeit, und zerstören Sie es, wenn es akzeptiert? – Zizouz212

+0

Beschlossen, nur ein Fenster mit einem Label und Button zu öffnen und das zu zerstören. Das schien zu funktionieren, außer dass das Problem jetzt darin besteht, dass das ganze Fenster während des Abhörens von Verbindungen einfriert und man nicht auf den Abbrechen-Button klicken kann ... hmm. Arbeitet immer noch daran. – Bapho

Antwort

1

Klingt nach einem Threading-Problem.

Ich bin nicht vertraut mit TK-Grafiken, aber ich könnte mir vorstellen, was Sie tun müssen, ist das Fenster mit der Meldung "Warten auf Player" zu starten. Dieses Fenster wartet dann darauf, dass etwas passiert.

Wenn das Meldungsfeld angezeigt wird, müssen Sie das "Abhören" in einem anderen Thread durchführen lassen, der zum Hauptmeldungsfeld zurücksendet, wenn jemand mit einem Semaphor oder einer Warteschlange verbunden ist.

auf Ihrem Haupt-GUI-Thread müssen Sie die Schleife machen:

  1. Kontrolle der Warteschlange oder Semaphore für Werte. Wenn dort ein Wert zu erwarten ist, schließen Sie das Feld. Dies muss nicht blockierend sein, damit der GUI-Thread immer noch nach Eingaben vom Benutzer suchen kann.
  2. nach Benutzereingabe überprüfen. Das ist wahrscheinlich mit Callback-Funktionen getan.
+0

Ich hatte Angst, dass das die Antwort sein würde ... Zeit, in Threads zu suchen. Vielen Dank! – Bapho

+0

@Bapho keine Panik, sie sind nicht * alle * so schlecht! Sie müssen nur Timing und Signalisierung beobachten und es wird Ihnen gut gehen. –

Verwandte Themen