2012-04-27 6 views
0

IDLEのコマンドラインのテキスト入力からグラフィックを更新する方法を教えてください。私のようなものがある場合:テキストゲームと一緒にTkinterを実行していますか?

from Tkinter import * 

root = Tk() 
can = Canvas(root, height=500, width=100) 
can.pack() 
mainloop() 

x = input("what is a number? ") 
print x 

ウィンドウは表示されますが、コマンドラインのプロンプトは表示されません。どのように私はこれを許可することができるかに関する任意のアイデア?

+1

イベントループをスローすると、入力方法を完全に再考する必要があります。 –

+0

コードラインを上のmainloopの下に置いてみてください:) –

+0

質問は、効果的にGUIを生成しているときに、なぜ入力がコマンドラインから来るようにしたいのですか?一般的には、ユーザーに番号を入力し、エントリフィールドに入力してからその値をプログラムに戻すようにするToplevelウィンドウを作成したいと思うでしょう...もちろん、いつでもコールバックを定義することができます番号も入れますが、ユーザーが数字を入力するまではGUIをフリーズします。 – mgilson

答えて

0

デバッグ用またはワンショット設定/入力用の場合は、コマンドラインパラメータとしてプログラムに渡すか、プロンプトコードをmainloop()呼び出しの前の任意の場所に置くことができます。一方、それがゲームに継続的に入力されている場合は、テキスト入力フィールドとおそらくメインフォームにボタンを追加して、ユーザーがデータを入力してボタンを押して入力が完了したことを示し、イベントハンドラ入力フィールドの内容を処理するボタンに関連付けられています。

上記のいずれもあまり意味をなされていない場合は、(他の言語の中で)Pythonですべての呼び出しを作成する方法のコードサンプルを含むTkのに関する有用な情報の多くを持っているサイトTkDocsを見てみましょう。

0

私はちょうどtkinterのウィジェットを使用することをお勧めします。

import Tkinter as tk 

def numEntered(*args): 
    print x.get() 
    x.set('') 
    return 

root = tk.Tk() 
can = tk.Canvas(root, height=500, width=100) 
can.pack() 

inputFrame=tk.LabelFrame(root, text="What is a number?") 
inputFrame.pack() 

x=tk.StringVar() 
inputEntry=tk.Entry(inputFrame,textvariable=x) 
inputEntry.pack() 

inputEntry.bind('<Return>',numEntered) 

tk.mainloop() 

お知らせいくつかの項目: 1)私はあなたがパックジオメトリマネージャを使用しているときに役立ちますラベルフレーム内のテキストエントリを置きます。 2)ユーザーが数字を入力してエンター(リターン)キーを押すと、関数を実行するためにバインドメソッドを使用しました。 3)関数は数値を出力し、変数をクリアします。

こちらがお役に立てば幸いです。

関連する問題