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