2014-12-24 127 views
2

我正在PyCharm中编写一个小型Python游戏。我正在使用Python版本3.4的Macbook上执行此操作。 游戏打开一个Tkinter窗口并添加一些东西。 但是,在运行游戏时,它会非常简短地显示并立即关闭。Python程序在PyCharm中运行后,Tkinter窗口自动关闭

我在Stackoverflow上发现了一些提示,在游戏结束时添加输入('按下以关闭窗口')。事实上,这可以确保窗口不会立即关闭,但对于游戏来说并不实用。在游戏中,用户需要使用他的箭头键进行游戏。因此,在这种情况下添加输入(...)是没有用的。我怎样才能防止窗口自动关闭?谢谢!

代码如下:

from tkinter import * 

# Scherm maken 
HEIGHT = 500 
WIDTH = 800 
window = Tk() 
window.title('Bellenschieter') 
c = Canvas(window,width=WIDTH, height=HEIGHT, bg='darkblue') 
c.pack() 



# Duikboot maken 
ship_id = c.create_polygon(5,5,5,25,30,15,fill='red') 
ship_id2 = c.create_oval(0,0,30,30,outline='red') 
SHIP_R = 15 
MID_X = WIDTH/2 
MID_Y = HEIGHT/2 
c.move(ship_id, MID_X, MID_Y) 
c.move(ship_id2, MID_X, MID_Y) 

# Duikboot besturen 
SHIP_SPD = 10 
def move_ship(event): 
    if event.keysym == 'Up': 
     c.move(ship_id, 0, -SHIP_SPD) 
     c.move(ship_id2, 0, -SHIP_SPD) 
    elif event.keysym == 'Down': 
     c.move(ship_id, 0, SHIP_SPD) 
     c.move(ship_id2, 0, SHIP_SPD) 
    elif event.keysym == 'Left': 
     c.move(ship_id, -SHIP_SPD, 0) 
     c.move(ship_id2, -SHIP_SPD, 0) 
    elif event.keysym == 'Right': 
     c.move(ship_id, SHIP_SPD, 0) 
     c.move(ship_id2, SHIP_SPD, 0) 
c.bind_all('<Key>', move_ship) 

window.update() 

input('Press <Enter> to end the program') 
+0

看起来像你upvote两次;实际上没有upvote;) – falsetru

回答

3

设置窗口小部件,事件处理程序后启动事件循环。

# input('Press <Enter> to end the program') # (X) 
window.mainloop() # OR mainloop() 

删除对input的调用。

+0

...并删除呼叫'输入' –

+0

@BryanOakley,是的。这就是为什么我用'input'评论这一行。我明确要删除对“input”的调用。感谢您的评论。 – falsetru

相关问题