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__方法。这是你的直接问题。

因此,您需要使用不同的测试。我建议使用 Python 的链式比较运算符自己进行边界检查(模块中似乎没有任何库支持graphics):

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 True,然后break如果测试条件为真:

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 回答