0

ウィンドウ全体ではなく、特定の部分に getMouse() 関数を適用しようとしています。「rect1」の場合、クリックして色を変更するブロックが必要です。ただし、他のブロックをクリックしても何も起こりません。誰かが助けてくれる場合に備えて、これに関連していると思われるコードの部分を添付しました。

#draw the grid 
for j in range (6):
    for i in range(6):
        sq_i = Rectangle(Point(20 + (40*i), 20 + (40*j)),
                         Point(60 + (40*i),60 + (40*j)))
        sq_i.draw(window)
        sq_i.setFill('white')
        sq_i.setOutline('grey')

#wait for a click 
window.getMouse ()

#turn the alotted region red
rect1 = Rectangle(Point(20 + (40*1), 20 + (40*1)),
                         Point(60 + (40*1), 60 + (40*1)))
rect1.setOutline('black')
rect1.draw(window)
rect1.setFill('brown')

#if the mouse is clicked in rect1, change the block color to black 
while window.getMouse() in rect1:
    rect1.setFill('black')
4

1 に答える 1

2

まず、何をするのかを理解する必要がありますwindow.getMouse() in rect1。Python のin演算子a in bは、メソッド call に変換することで機能しますb.__contains__(a)。残念ながら、このRectangleクラスにはメソッドがありません__contains__。これはあなたの差し迫った問題です。

したがって、別のテストを使用する必要があります。graphicsPython の連鎖比較演算子を使用して、境界チェックを自分で行うことをお勧めします (モジュールでこれをサポートするライブラリはないようです)。

mouse = window.getMouse()
if rect1.p1.x < mouse.x < rect1.p2.x and rect1.p1.y < mouse.y < rect1.p2.y
    rect1.setFill("black")

ステートメントのwhileループを変更したことに注意してください。if四角形にヒットするまでマウスのクリックを繰り返しテストしたい場合は、おそらくループしてwhile Truebreakテストされた条件が true の場合:

while True:
    mouse = window.getMouse()
    if rect1.p1.x < mouse.x < rect1.p2.x and rect1.p1.y < mouse.y < rect1.p2.y
        rect1.setFill("black")
        break
于 2014-03-08T23:54:23.413 に答える