Quit-Funktion im python-Programm

Ich habe ein Programm, das läuft in Python, ohne die Konsole vorhanden (das ist zu sagen, ich habe es kompiliert, die mithilfe von py2exe). Ich will, dass die Menschen in der Lage sein, um zu beenden aus dem Hauptmenü oder durch eine bestimmte Taste-drücken Sie im Spiel (z.B. Shift+Q). Bei mir läuft es, jetzt, in Windows, wenn ich auf Arbeit bin im kompilieren von Linux - /Mac-Versionen. Durch drücken der X-Taste funktioniert, wenn es keine 'while' - Schleife läuft, so scheint es, und schließt es richtig, ansonsten scheint "store" den Befehl schließen warten, bis die aktuelle Schleife geschlossen.

Als für die Menü-Optionen, habe ich mich gründlich durch Dokumentation und Stackoverflow und versuchte quit () -, exit(), sys.exit() und jede Kombination, die ich finden kann, aber jedes mal, wenn ich bekommen:

Traceback (most recent call last):
  File "alphatime.pyw", line 61177, in <module>
  File "alphatime.pyw", line 53970, in place_menu
NameError: global name 'sys' is not defined

wenn ich versuche die sys.beenden Sie, und dann:

Traceback (most recent call last):
  File "alphatime.pyw", line 61177, in <module>
  File "alphatime.pyw", line 53970, in place_menu
NameError: global name 'quit' is not defined

wenn ich versuche, einfach "quit()". Ich habe gehört, über 'Raising' Dinge, wie eine Notwendigkeit, um das Programm zu schließen, aber ich bin mir nicht klar, was das bedeutet (ich bin neu in Python) und wie ich gehen würde, um so zu sein.

So, meine Frage ist zwei-Fach.

Erstens, gibt es etwas, was ich in-Schleifen für das erkennen von Tastendrücken etwas, das erkennen, das 'X' geklickt haben, und schließen?

Zweitens, gibt es einen entsprechenden Befehl, wird nur das Programm schließen? Ich kann nicht herausfinden, warum diese Befehle nicht funktionieren, und ich habe schon ein paar Beschwerden von Menschen, die mit dem Programm, stürzt es ab, oder Sie müssen die Tastenkombination Strg-alt-entf, oder was auch immer. Ich glaube

import os
try:
  os._exit(return_code)
except:
  pass

funktionieren würde, aber in diesem Punkt bin ich nicht sicher, ich bin kompetent genug in python zu implementieren, angemessen. Vielen Dank im Voraus!

  • Auch könnten Sie ein signal, oder halt 2 threads, die im wesentlichen würde warten, bis das schließen-Ereignis und beenden, beenden, der andere thread, der macht den rest.
  • whaat? er sagte, er sei ein Anfänger nicht verwirren ihn nur noch. 🙂
  • Ich gestehe, meine Augen verglast, ein wenig an :). Aber das erste problem ist nun gelöst, aber ich bin immer noch verwirrt über die Schaltfläche " X " Problem.
  • die x 'eingebaute'.. es wird aufgerufen, ein beenden-Ereignis ab, wenn Sie es so lange gedrückt, wie es eine Zeile, die bricht die Schleife oder beendet das Programm. wenn Sie hinzufügen, sys.beenden() die x-Taste sollte funktionieren.
  • Ich bin mir nicht sicher, was du meinst, wenn du es eine Zeile, die bricht die Schleife ab. Ich bin mit dem libtcod Bibliothek, und es hat eine Funktion namens wait_for_keypress (selbsterklärend). Ich habe eine Schleife, während etwas wahr ist, es wird warten, bis ein Tastendruck, und die wenn/elifs handle es werden nur für bestimmte Tastendrücke. Was würde ich wollen, um in es zu behandeln das X? Und wo würde ich die sys.beenden()? Danke! So gemacht habe, auch :).
  • die sys.beenden() kommen würde, nach der mainloop in der Regel oder irgendwoanders möchten Sie vielleicht vorzeitig, beenden Sie das Programm. durch die Linie, bricht der loop-siehe dieses Beispiel -> bpaste.net/show/iNukaBlsSmmvLqEZb5pe
  • Ah, clever - ich sehe. Also, wenn eine option in der Schleife führen auf eine andere Funktion, und ich verließ die Schleife hinter sich, die Sie nach der Schleife würde nur nie aufgerufen werden, richtig? Und dann würde das " X " reagiert auf die beenden? EDIT: ich habe versucht, dass ein beenden außerhalb der Schleife, aber das drücken der X-Taste immer noch nicht nennen :S
  • hmm. im nicht sicher. vielleicht tun Sie einfach, was Sie wissen jetzt, verwenden Sie einen Schlüssel oder so um das Programm zu schließen, bis Sie ein bisschen besser verstehen das Thema, ich kann dir nicht helfen, viel über das Beispiel, das ich gab, weil ich bin nicht vertraut mit der Bibliothek, die Sie verwenden.

Schreibe einen Kommentar