2012-07-12 130 views
3

我有一个程序在Python中运行,没有控制台(也就是说,我使用py2exe编译它)。我希望人们能够从主菜单中退出,或者通过游戏中的特定按键(比如Shift + Q)退出。我现在正在Windows上运行它,尽管我正在编译Linux/Mac版本。如果没有'while'循环运行,按下X按钮就可以工作,并且正确关闭它,否则似乎'存储'关闭命令等​​到当前循环关闭。在python程序中退出函数

至于菜单选项,我已经通过文件和彻底#2看了看,试图退出(),出口(),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 

,如果我尝试只是 “退出()”。我听说过'提高'需要关闭程序,但我不清楚这意味着什么(我是Python的新手),以及我会如何去做。

所以,我的问题是双重的。

首先,有什么我可以把循环识别按键的东西,将承认'X'被点击,并关闭?

其次,是否有一个合适的命令可以关闭程序?我无法弄清楚为什么这些命令不起作用,而且我有很多使用该程序的人的抱怨,或者他们必须按Ctrl-Alt-Del,或者其他什么。我相信

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

会的工作,但在这一点上,我不知道我在蟒蛇胜任适当地进行部署。提前致谢!

+0

那么你可以使用一个信号,或者只是使用2个线程,主要等待关闭事件并退出,终止其他所有线程。 – Maresh 2012-07-12 10:43:25

+0

whaat?他说他是初学者,不要混淆他。 :) – iKlsR 2012-07-12 10:46:20

+0

我承认,我的眼睛盯着那个:)。但第一个问题现在已经解决了,尽管我仍然对'X'按钮问题感到困惑。 – UltimaRatioRegum 2012-07-12 10:57:48

回答

5

没有你的任何机会

import sys 

,因为这应该工作!

+0

啊!我一直在做“从系统”并退出,但没有得到所有系统。多么尴尬。我的感谢! 但点击'X'按钮在主菜单中仍然不起作用。有没有办法“捕捉”它? – UltimaRatioRegum 2012-07-12 10:56:19

3

NameError: global name 'sys' is not defined

之前,你可以使用sys.exit(),你必须import sys

这是退出程序的最佳方式。以_开头的函数名称被认为是内部函数名称,除非您真的真的试图做一些奇怪的事情,否则不应使用它。