2017-05-17 3 views
1

私はSOに固執していて、今は本当に必死になっています。私たちはgraphics.pyライブラリを使ってミニプログラムを作成しなければなりません。基本的に私が知りたいのは、どうやってスタートメニューのようにすることができるのか、そして、ユーザーがクリックすると、基本的に 'ゲーム'の別のフレームに変わります。フレームを変更しても、Zelleの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

は心配しないでください - あなたはそれだと思うよう息:)

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) 

ドキュメンテーション文字列が本当に..それをすべて言うが、基本的に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ステートメントを追加して、コードが実行されていると思われるときに実行するようにしてください:)。例えば。

print("this will definitely print") 
if clickPoint == True: 
    print("Code is being run!") 
    title.undraw() #THIS DOESNT WORK. 
    subheading.undraw() 

プログラムの出力で2番目のprint文が発生していないことがわかります。あなたはグラフィックスライブラリを開く場合も

は、(それはそうではない取引の大きすぎるかなり小さいです)、あなたが Textクラスに定義された undraw方法が存在しないことがわかります Textオブジェクトを見てみましょう。利用可能な方法は setTextなので、私は先にそのメソッドを使い、テキストを空の文字列に設定しました。

ああ、最後のこと。 ifの目標は、ユーザーがどこかをクリックするまでプログラムを保持することで、getMouseメソッドはそれをとにかく(クリックが発生するまでループしていました)、if文を完全に削除するだけです。

幸運を祈る!

+0

あなたはちょうど私の人生を保存しました!!!ありがとうありがとう!!!!!!!!はい、説明してください!私は本当にそれを取得しません。 – Rita

関連する問題