我也是如此坚持这一点并且现在变得非常绝望..我们必须使用graphics.py库创建一个迷你程序。所以基本上我想知道的是我怎么能有一个开始菜单,然后当用户点击它时,它会改变为游戏的另一个框架'基本上??
我的朋友建议使用.undraw()
功能,但我认为这不适用于文字&也只是将.setText("")
更改为空字符串,因为我试图摆脱标题&副标题......这是我的代码:
from graphics import *
# create the window to hold the contents
win = GraphWin("SHAPES FRENZY", 800, 500)
win.setBackground("Black")
#Setting the Title Page:
title=Text(Point(400,250),"Shapes Frenzy.")
title.draw(win)
#Subheading
subheading=Text(Point(400,290), "Click anywhere to continue.")
subheading.draw(win)
#Next Frame
clickPoint = win.getMouse()
if clickPoint == True:
title.undraw() #THIS DOESNT WORK.
subheading.undraw()
#Setting up Second frame of program.
hi=Text(Point(500,250),"Please Work.")
hi.setFace('courier')
hi.draw(win)
win.getMouse() # Pause to view result
win.close() # Close window when done
答案 0 :(得分:0)
win.getMouse()
并不像你想象的那样工作。你想要的是这样的:
clickPoint = win.getMouse()
title.setText("") #THIS DOESNT WORK.
subheading.setText("")
win.getMouse()
将返回Point
个对象。以下是库中的剥离定义:
def getMouse(self):
"""Wait for mouse click and return Point object representing
the click"""
# gets some stuff ready
while self.mouseX == None or self.mouseY == None:
# waits for click
# post click code
return Point(x,y)
doc字符串确实说明了这一切..但基本上win.getMouse()
将阻止你的程序,因为它将在while
循环内运行,直到注册了一个点击。最后,请注意返回Point(x,y)
。
出了什么问题是......
您正在将win.getMouse的输出win.getMouse()
分配给变量。此变量的值如下所示:Point(161.0, 247.0)
。所以当它达到你的if
表达式时。 Python正在检查Point(161.0, 247.0) == True
。好吧,显然它没有!所以,发生了什么事情,如果阻止永远不会被执行,你尝试过的setText从未在第一时间运行。
为了将来的调试,请尝试添加print
语句,以确保在您认为代码执行时执行代码:)。 E.g。
print("this will definitely print")
if clickPoint == True:
print("Code is being run!")
title.undraw() #THIS DOESNT WORK.
subheading.undraw()
您会注意到,在您的程序输出中,第二个打印语句从未发生过。
另外,如果你打开图形库(它很小,所以不是太大的交易)并看看Text
对象,你会发现没有{{1为undraw
类定义的方法。有一个Text
方法可用,所以我继续使用该方法并将文本设置为空字符串。
啊,最后一件事。由于你setText
语句的目标只是保持你的程序,直到用户点击任何地方,并且getMouse方法仍然这样做(陷入while循环直到发生点击),正确的做法是放弃完全是if语句。