尝试运行Python程序,但所有打开的是DOS窗口

时间:2010-01-24 23:42:48

标签: python wxpython

我刚刚完成了一个应该(希望)播放GUI Tetris程序的程序。我已经清理了所有的语法错误,但是现在当我双击,或者通过命令提示符运行程序时,DOS窗口弹出不到一秒钟,并且在没有运行程序的情况下消失。

发生了什么事?


以下是codepad.org上代码的链接

http://codepad.org/tq4et1rO

6 个答案:

答案 0 :(得分:9)

哇,您的代码中确实存在巨大错误数量。我开始在pdb下运行它,逐个识别和修复它们,但是在20左右之后我就放弃了。到目前为止我已修复的内容(在diff的输出中,行以<开头表示它们在您的版本中,或者>表示它们在我的部分修复版本中)。注意多种多样:你经常写Flase而不是False,使用错误的大写,使用-(减号)而不是=(等于),拼写错误变量(例如Boardd而不是{{1 },Board代替even),event代替rnage,依此类推,等等。

range

经过所有这些修复之后,我已经停止发现另外一个错字(当你明确指出37c37 < self.isStarted = Flase --- > self.isStarted = False 63c63 < self.isWaitingAfterLine - Flase --- > self.isWaitingAfterLine = False 87c87 < for i in range(Board.BoardHeight * Board.Boardwidth): --- > for i in range(Board.BoardHeight * Board.BoardWidth): 135c135 < if even.GetId() == Boardd.ID_TIMER: --- > if event.GetId() == Board.ID_TIMER: 205c205 < self.curY = Board.Height - 1 + self.curPiece.minY() --- > self.curY = Board.BoardHeight - 1 + self.curPiece.minY() 214c214 < for i in rnage(4): --- > for i in range(4): 217c217 < if x < 0 or x >= Board.BoardWidth or y < 0 or y >= Board.Boardheight: --- > if x < 0 or x >= Board.BoardWidth or y < 0 or y >= Board.BoardHeight: 278c278 < self.coords = [[0, 0] for i in rnage(4)] --- > self.coords = [[0, 0] for i in range(4)] 356c356,357 < Tetris(None, -1, 'Tetris') --- > tetris = Tetris(None, -1, 'Tetris') > app.SetTopWindow(tetris) 时你是def sqaureHeight) - 我不知道有多少错别字和其他错误仍然隐藏在这360行代码......比这些行的1/10更密集的错误足够高。

衷心地建议你从不那么雄心勃勃的项目开始,并教你自己仔细“复制”你的代码,因为这些错字似乎很容易:它是可能同时成为一名出色的程序员,但同时又需要额外的努力和勤奋。 诸如pylint之类的工具也可能有所帮助,尽管它们确实有限制。

编辑:事实证明,在将squareHeight发生了几次sqaure后,程序确实运行了 - 并立即显示一个空窗口说“游戏结束“并进入square提示,作为最后一行。因此,除了许多拼写错误之外,还必须存在一个或多个令人讨厌的逻辑级错误。在你第一次尝试编程的过程中,我重复一下这个恳求,开始时有很多东西,很多更简单。

答案 1 :(得分:8)

运行脚本确实会产生追溯:

Traceback (most recent call last):
  File "tetris.py", line 356, in <module>
    Tetris(None, -1, 'Tetris')
  File "tetris.py", line 10, in __init__
    self.statusbar - self.CreateStatusBar()
AttributeError: 'Tetris' object has no attribute 'statusbar'

您的脚本在第10行有错误:

self.statusbar - self.CreateStatusBar()

你的意思是在那里分配,而不是从尚不存在的属性中减去。

答案 2 :(得分:2)

发生错误。不幸的是,DOS窗口关闭(因为Python程序结束),你没有看到实际的错误。自己启动DOS窗口(开始 - &gt;运行 - &gt;'cmd')并从那里运行程序。这将向您展示追溯。

答案 3 :(得分:0)

DOS窗口弹出,因为你使用了错误的python二进制文件(python.exe而不是pythonw.exe?)

它没有显示任何内容,因为您的程序中存在错误。如果没有堆栈跟踪,我猜你忘了进入主循环。尝试发布一些代码。

答案 4 :(得分:0)

Traceback (most recent call last):
  Line 3, in <module>
    import wx
ImportError: No module named wx

您需要安装wxPython

答案 5 :(得分:0)

您可能想要更改(在脚本底部)

app = wx.App()

app = wx.App(redirect=False)

否则,wxPython启动时发生的分段错误将不会打印到控制台,并且可能成为追踪的噩梦。