2013-04-29 59 views
0

我是Python新手,想知道如何在按下按鍵時將圖像更改爲另一個圖像。當我按下向下箭頭鍵時,我希望我的圖像從GuyUp.gif更改爲GuyDown.gif,因此看起來我的人實際上正常行走。我在Python代碼如下所示:如何在Python中按下特定的按鍵時更改圖像

from tkinter import * 
tk = Tk() 
tk.title("Triangle Movement") 
tk.resizable(0, 0) 
canvas = Canvas(tk, width=500, height=500) 
canvas.pack() 
tk.update() 
guyup = PhotoImage(file = 'GuyUp.gif') 
canvas.create_image(5, 5, image = guyup, anchor = NW) 
def movetriangle(event): 
    if event.keysym == 'Up': 
     canvas.move(1, 0, -4) 
    elif event.keysym == 'Down': 
     canvas.move(1, 0, 4) 
    elif event.keysym == 'Left': 
     canvas.move(1, -4, 0) 
    elif event.keysym == 'Right': 
     canvas.move(1, 4, 0) 
    elif event.keysym == 'w': 
     canvas.move(2, 0, -4) 
    elif event.keysym == 's': 
     canvas.move(2, 0, 4) 
    elif event.keysym == 'a': 
     canvas.move(2, -4, 0) 
    else: 
     canvas.move(2, 4, 0) 
canvas.bind_all('<KeyPress-Up>', movetriangle) 
canvas.bind_all('<KeyPress-Down>', movetriangle) 
canvas.bind_all('<KeyPress-Left>', movetriangle) 
canvas.bind_all('<KeyPress-Right>', movetriangle) 
canvas.bind_all('<KeyPress-w>', movetriangle) 
canvas.bind_all('<KeyPress-s>', movetriangle) 
canvas.bind_all('<KeyPress-a>', movetriangle) 
canvas.bind_all('<KeyPress-d>', movetriangle) 

我有兩個圖像,並希望把它放在我的elif語句的「打倒」 謝謝您的幫助鍵符!

+0

由於您是Python的新手,灌輸評論:閱讀[PEP 8](http://www.python.org/dev/peps/pep-0008/)。在這種情況下,您的違規行爲是在關鍵字參數周圍放置空格;) – Felipe 2013-04-29 23:31:47

回答

1

首先評論:你已經綁定了所有的按鍵,所以爲什麼要在回調中使用所有的條件?只需定義單獨的moveup,movedown等功能並將它們綁定到適當的按鍵。

現在,對於圖像切換,您需要在應用程序中聲明顯示哪個圖像被顯示,哪個圖像不顯示。由於您使用的是全局變量而沒有類,所以您還必須將這些信息存儲在全局變量中。更改代碼的以下部分:

current_image = PhotoImage(file='GuyUp.gif') 
image_id = canvas.create_image(5, 5, image=current_image, anchor=NW) 
other_image = PhotoImage(file='GuyDown.gif') 

,並添加以下功能

def swap_images(): 
    global current_image, other_image, image_id 
    x, y = canvas.coords(image_id) 
    canvas.delete(image_id) 
    image_id = canvas.create_image(x, y, image=other_image) 
    current_image, other_image = other_image, current_image 

現在你可以把這個功能,無論你在你的程序的邏輯一樣。

你可能會更好過包裝的所有的你寫的一類什麼,並用實例變量,而不是全局的,和調整功能,這種情況下,作爲一個練習;)


編輯:修復了create_image方法中缺少的關鍵字。

我也意識到你必須改變你的canvas.move調用使用image_id而不是1作爲標識符。也許更好的替代方法是在對象本身上使用標籤。

+0

感謝您的幫助,但我仍然遇到問題,按下向下箭頭鍵時圖像不會改變。你應該將image_id中的圖像更改爲other_image而不是current_image? – 2013-04-29 23:51:46

+0

對不起!我在通話中錯過了一個'image ='。請參閱編輯注意事項 – Felipe 2013-04-30 00:40:08

+0

謝謝!我將繼續練習Python並希望創建一個簡單的遊戲。 :) – 2013-04-30 11:40:40

相關問題