将getMouse()函数应用于窗口的某个部分
我正在尝试把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 个回答
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