2015-11-25 94 views
1

我只是想用龜方法onscreenclick找到一個鼠標點擊的座標。目前,我有一個網格,我正在玩奧賽羅。我已經有算法的原始座標轉換爲特定的網格座標,可以通過遊戲來解釋。我似乎無法使onscreenclick方法工作。在文檔上,它說使用帶兩個參數的'fun'函數。我相信我有這個,但它不起作用。我是一個初學者與蟒蛇和烏龜,所以任何幫助將不勝感激:)使用turtle.onscreenclick找到鼠標的座標點擊

import turtle 

    xclick = 0 
    yclick = 0 

    def getcoordinates(): 
     turtle.onscreenclick(modifyglobalvariables()) 

    def modifyglobalvariables(rawx,rawy): 
     global xclick 
     global yclick 
     xclick = int(rawx//1) 
     yclick = int(rawy//1) 
     print(xclick) 
     print(yclick) 

    getcoordinates() 

回答

1

你太親近了!

import turtle 

xclick = 0 
yclick = 0 

def getcoordinates(): 
    turtle.onscreenclick(modifyglobalvariables) # Here's the change! 

def modifyglobalvariables(rawx,rawy): 
    global xclick 
    global yclick 
    xclick = int(rawx//1) 
    yclick = int(rawy//1) 
    print(xclick) 
    print(yclick) 

getcoordinates() 

抓住變化?在語法上,刪除modfiyglobalvariables後的括號。 你想要的是傳遞的功能,你在做什麼是傳遞函數的輸出。

如果運行的代碼,你會得到一個異常(類型錯誤)說你沒有通過正確的參數;這是因爲它試圖調用modifyglobalvariables。減少的,你想要的是

bind_to_mouseclick(my_function) 

在這種情況下,在每一個鼠標點擊,my_function將被調用。此時,它可能會或可能不會提供正確的參數。相反,你說

bind_to_mouseclick(my_function()) 

Python的評估my_function並綁定呼叫鼠標點擊的結果。如果my_function恰好返回一個函數,這是很大的(也許是我們預期的)。如果它返回一個整數或字符串,那就沒有用。如上所述,關鍵是例外。如果函數已經不需要爭論,這可能是微妙的檢測

+0

太謝謝你了! –