将getMouse()函数应用于窗口的一部分

时间:2014-03-08 21:21:14

标签: python python-3.x zelle-graphics

我试图将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')

1 个答案:

答案 0 :(得分:2)

首先,您需要了解window.getMouse() in rect1的作用。 Python的in运算符的工作原理是将a in b转换为方法调用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