Wie läuft man eine unendliche Schleife in pygtk?

Ich schaffe eine Anwendung in pygtk, die eine Endlosschleife beinhaltet. Die Schleife, denke ich, stört witk gtk.main () und daher reagiert die Anwendung nicht. Eigentlich baue ich eine Server-Typ-Anwendung, die ständig auf Client-Verbindungen hört.Plzzz Hilfe …. Ich bin ein Neuling in diesem.

Dies ist eine Probe von dem, was ich anfangs versuchte zu tun. (Für diejenigen, die den Code wollten)

while 1: s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(('',2727)) s.listen(1) c,d=s.accept() print d x=c.recv(1024) 

Ich habe an der Stelle der gtk.main () am Ende mit:

 while 1: s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(('',2727)) s.listen(1) s.accept() gtk.main_iteration_do(False) 

Es würde funktionieren, aber das s.accept () verursacht das gleiche Problem wie früher …. Kann jemand helfen

3 Solutions collect form web for “Wie läuft man eine unendliche Schleife in pygtk?”

Sie können Ihre Anwendung dazu zwingen, anstehende gtk-Ereignisse auf folgende Weise zu verarbeiten:

 while True: #your code while gtk.events_pending(): gtk.main_iteration() 

Allerdings, wenn 'Ihr Code' eine Weile dauert, um sie auszuführen, sollten Sie es in einem Hintergrundprozess umsetzen.

Du könntest einen zweiten Thread benutzen (docs.python.org/library/threading.html). Es gibt auch eine Möglichkeit, gtk in deiner Schleife zu integrieren (indem du pygtk.org/docs/pygtk/… nennst), aber da du nennen nennst, schätze ich, dass du Sperrrufe nennt, die auch die Schleife blockieren, bis etwas im Netzwerk passiert. Allerdings kann ich nur erraten, bis du uns einen wirklichen Code zeigst.

Sogar ohne einen Code zu sehen, bin ich ziemlich sicher, dass ich weiß, wo diese Frage geht. Pygtk ist wahrscheinlich nicht anders als die anderen GUI-Frameworks, dass seine Hauptschleife eine Ereignisschleife ist. Alle Widgets in der Anwendung registrieren ihre Ereignisse zu dieser Schleife für Ihre App zu funktionieren. In diesem Fall gefahrene GUI-Frameworks, sollten Sie niemals den Haupt-Thread blockieren. Alle Operationen im Hauptfaden sollten relativ schnell zurückkehren.

Wenn Sie etwas ausführen müssen, das zu blockieren oder eine große Verarbeitung durchzuführen, sollte diese Funktionalität zu einem separaten Thread verschoben werden. Dies wäre erforderlich, wenn Ihre Netzwerk-Schleife wird für immer in seiner eigenen Event-Schleife zu blockieren. Wenn dies der Fall ist, hättest du keine Möglichkeit, einen Thread zu verwenden.

Ich bin nicht genau mit pygtk vertraut, aber PyQt / PySide bietet eine Funktion, mit der du die Event-Loop verarbeiten kannst. Sie können dieses Innere einer Schleife festhalten, die Sie in Ihrem Hauptfaden durchführen, um regelmäßig die Ereignisse zu spülen. Dies wäre eine Alternative zum Ausführen deines Prozesses in einem anderen Thread. Aber wieder, nur wenn dein anderer Code nicht blockiert und einfach immer wieder schleicht.

  • Effiziente und schnelle Python While Schleife bei der Verwendung von Schlaf ()
  • Ersetzen während Schleife mit Listenverständnis
  • Wie brechen Sie aus, während Schleife in Python?
  • Wie man den Druckvorgang abbricht, wenn der Wert der gleiche ist wie der vorherige Zyklus - Python
  • Wie stelle ich sicher, dass ein Python while-loop eine bestimmte Zeitspanne dauert?
  • Umwandlung für Loops zu Loops in Python
  • Drucken Sie das Ergebnis sobald die Benutzereingabe "fertig"
  • Python drucken nachher gemacht
  • Python: versuchen, 'count' zu verwenden, um die Anzahl der Zeilen zu begrenzen, wird "print" ausgegeben
  • Python - Unendlich während der Schleife, brechen bei Benutzereingaben
  • Was ist der Unterschied zwischen "while 1" und "while True"?
  • Python ist die beste Programmiersprache der Welt.