3

コンソールが存在しない状態で Python で実行するプログラムがあります (つまり、py2exe を使用してコンパイルしました)。メイン メニューから、またはゲーム内で特定のキーを押して (Shift + Q など) 終了できるようにしたいと考えています。Linux/Mac バージョンのコンパイルに取り組んでいますが、今のところ Windows で実行しています。「while」ループが実行されていない場合は X ボタンを押すと機能するようで、正しく閉じます。そうでない場合は、現在のループが閉じられるまで閉じるコマンドを「保存」するようです。

メニュー オプションについては、ドキュメントと Stackoverflow を徹底的に調べ、quit()、exit()、sys.exit()、および見つけられるすべての組み合わせを試しましたが、毎回次のようになります。

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

sys.exit を試すと、次のようになります。

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

「quit()」だけを試してみると。プログラムを閉じる必要があるなどの「発生」について聞いたことがありますが、それが何を意味するのか(私はPythonが初めてです)、どのようにそれを行うのかはわかりません。

ですから、私の質問は 2 つあります。

まず、クリックされた「X」を認識して閉じるキープレスを認識するためにループに入れることができるものはありますか?

第二に、プログラムを閉じるだけの適切なコマンドはありますか? これらのコマンドが機能しない理由がわかりません。また、このプログラムを使用している人々から、プログラムがクラッシュしたり、ctrl-alt-del を使用しなければならないなどの苦情がかなりありました。私は信じている

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

動作しますが、この時点では、Python を適切に展開するのに十分な能力があるかどうかはわかりません。前もって感謝します!

4

2 に答える 2

5

ひょっとして?

import sys

それはうまくいくはずだからです!

于 2012-07-12T10:42:55.270 に答える
3

NameError: グローバル名 'sys' が定義されていません

を使用する前にsys.exit()、 を行う必要がありimport sysます。

これがプログラムを終了する最善の方法です。で始まる関数名は内部的なものと見なされるため、何か奇妙なことを実際に行おうとして_いる場合を除き、使用しないでください。

于 2012-07-12T10:43:45.570 に答える