2014-11-16 39 views
0

我在Mac OSX Mountain Lion上的PyCharm IDE(Community Edition 3.4)上使用Python 2.7與Tkinter。我正在嘗試使用Tkinter構建一個簡單的跳棋遊戲。到目前爲止,我已經創建了一個棋盤,並且能夠創建遊戲片斷。我已經設法達到兩名選手可以在棋盤上拖動棋子的地步。但是,這裏的東西變得毛茸茸的 - 我無法找到如何將棋子限制在棋盤上的「黑色」方塊上。我無法在Stack Overflow上傳圖像,因爲我是一個沒有聲望的noobie。所以這裏是我創建的跳棋板的鏈接:http://imgur.com/rT77NPB如何使用Tkinter canvas.find_below?

在我創建的類中,當它們被按下時,我會使用「canvas.tag_bind」來希望代碼告訴我灰色或橙色遊戲片,點擊後會顯示片是在「紅色」方塊還是「黑色」方塊。

在我的類代碼,我有以下的「canvas.tag_bind」聲明:

canvas.tag_bind("oval", "<ButtonPress-1>", OnOverlappingRed) 

一旦我的鼠標按壓超過一灰色或橙色件,執行下面的功能,以確定是否一塊是一個黑色的正方形或紅色正方形:

def OnOverlappingRed(event): 
     item_below = canvas.find_below("oval") 
     print item_below 
     print canvas.gettags(item_below[0])[0] 

但是,當我執行我的計劃是這樣的輸出我得到的,當我按在板上灰色或橙色片:

(64,) 
red 

Tkinter不應該給我下面的那塊廣場索引嗎?我經歷了Tkinter文檔,那是「find_below」的確切定義 - 它返回了所討論項目下面的項目。

那麼這裏發生了什麼,以及如何使用我的代碼解決這個問題?

回答

1

我不認爲find_below正在做你認爲正在做的事情。它在橢圓下找不到項目,它在堆疊順序中找到較低的項目,這可能是畫布上的任何項目。除非您更改堆疊順序,否則它將始終爲同一參考項目返回相同的項目。

代替find_below,您可能要使用find_closestfind_overlappingfind_enclosing

+0

非常感謝您的建議。如何改變Tkinter的堆疊順序? – ragzputin

+0

@ user2551765:使用'lift'和'lower'方法 –

0

謝謝你們的答案。我嘗試使用canvas.find_overlapping以下列方式找到是圓形片,像這樣下面的正方形:

def OverlappingSquare(event): 
     print canvas.find_overlapping(40, 80, 90, 130) 

40,80,90,130是具有灰色片上的頂部上的黑色正方形的座標它。這是輸出我得到的,當我用上面的「find_overlapping」命令:

(1, 2, 3, 9, 10, 11, 65) 

我不知道這是什麼意思元組。有人可以解釋這個意思嗎?

編輯: 我發現了答案,這個問題 - 元組顯示了所有的廣場周圍的特定方是誰的尺寸提供給find_overlapping()方法。這是下面的代碼我用來給我圓形片下方的特定正方形,其被點擊的確切的參考號:

def OverlappingSquare(event): 
     item_below = canvas.find_overlapping(event.x,event.y,event.x,event.y)[0] 
     print item_below 

此打印出準確的正方形參考號(其可以是1,3,5 ,7等)