2017-07-14 9 views
1

私は絶えず私はTkinterのを介して実行したいと思い私は、テキストベースのアプリケーションのためのTkinterの出力ウィンドウを作成しようとしてい

テキストと出力テキスト(そのテキストベースのゲーム)を取り込んでスクリプトを持っていますGUIコンソールに反対

Python : Converting CLI to GUI

としてこの質問は完全にGUIのINSERT INTO「印刷」を変換する方法を答えます。

問題は私のゲームが明白に大量のループを通り抜けていて、決して実行されない(GUIが表示されない)か、最初に実行するので、 "app.mainloop()それは他の何かを実行させません。

私はこれらのループをどうにかしようとすることができますが、それは非常にハックされているようです。 app.mainloop()内で実行するように私のコードベース全体を修正しようとすることもできますが、本当に必要と思うのは複数のスレッドです。問題は、私はその仕事をどうやって作るのか分かりません。

は、いくつかの他の質問がありますが、それらのいずれかが動作しないか、あまり意味がありません。 Tkinter with multiple threads

Run process with realtime output to a Tkinter GUI

感謝。

編集:非常に単純化されたコード:

def moveNorth(): 
    print('You have moved north') 

def interpreter(command): 
    if command == 'go north': 
     moveNorth() 
    else: 
     print('invalid command') 

def listener(): 
    playerchoice = sys.stdin.readline().strip() 
    return playerchoice 

if __name__ == '__main__': 
    print('Welcome') 
    while playing: 
     interpreter(listener()) 
+0

whileループは、while bad_answer:ask_question()を意味しますか? – Nelson

+0

ええ、主なものは私の通訳です。基本的には、常にプレーヤーの入力を待ち受け、それに基づいて行動します。私はそれについて考えるので、唯一の無限のものとして問題を引き起こす唯一のループかもしれません。私のコードはかなり長いですが、可能なので何かを忘れています。 –

+0

あなたのコードの一部、または少なくとも[最小、完全、かつ確認可能な例](https://stackoverflow.com/help/mcve)を投稿してください。バグをそのまま維持しながらできるだけ多くのコードを削除してください。 – Nelson

答えて

1

私はあなたがそれを必要以上にそれをより複雑にすることかもしれないと思います。

Tkinterの場合、少なくともコンソール対話をGUI対話に変更するのは簡単です。

最も簡単な例は、ユーザー入力にEntryフィールドを使用し、出力にTextウィジェットを使用することです。

ここでは、Tkinterを使用してコンソールベースのゲームをGUIに移動する簡単な例を示します。 GUIほとんどのため、もう少しコードがあるあなたが見ることができるように

import tkinter as tk 
import random 


root = tk.Tk() 

entry_label = tk.Label(root, text = "Guess a number between 1 and 5: ") 
entry_label.grid(row = 0, column = 0) 

#Entry field for user guesses. 
user_entry = tk.Entry(root) 
user_entry.grid(row = 0, column = 1) 

text_box = tk.Text(root, width = 25, height = 2) 
text_box.grid(row = 1, column = 0, columnspan = 2) 

text_box.insert("end-1c", "simple guessing game!") 

random_num = random.randint(1, 5) 

def guess_number(event = None): 
    #Get the string of the user_entry widget 
    guess = user_entry.get() 

    if guess == str(random_num): 
     text_box.delete(1.0, "end-1c") # Clears the text box of data 
     text_box.insert("end-1c", "You win!") # adds text to text box 

    else: 
     text_box.delete(1.0, "end-1c") 
     text_box.insert("end-1c", "Try again!") 

     user_entry.delete(0, "end") 
# binds the enter widget to the guess_number function 
# while the focus/cursor is on the user_entry widget 
user_entry.bind("<Return>", guess_number) 

root.mainloop() 

コンソールの数を推測ゲーム:ここで

import random 

print("simple game") 
print("-----------") 

random_num = random.randint(1, 5) 
print(random_num) 

x = True 

while x == True: 
    #Input for user guesses. 
    guess = input("Guess a number between 1 and 5: ") 

    if guess == str(random_num): 
     #Print answer to console. 
     print("You win!") 
     x = False 
    else: 
     print("Try again!") 

は、同じゲームのTkinterのGUIの一例ですそれはGUI設計です。

あなたが変更する必要がある主な部分は、回答に対する入力と入力の使い分けと、あなたの回答に対するinsertとvs printの使用です。残りは本当に単なるデザイン物です。

質問を継続的に保存したい場合は、新しい質問でラベルを更新したり、新しい質問ごとにtkinters askstringを使用することもできます。多くのオプションがあります。

主なことは、ユーザーの回答の価値を得て、その答えを使って質問でテストし、その結果をテキストボックスに印刷することです。

+0

これは素晴らしいです、ありがとうございます。 –

+0

@ JaneDoe:どうぞよろしくお願いいたします。 tkinterには多くの便利なGUIウィジェットがあります。テキストベースや画像ベースのゲームでは、Tkinterを使うことができます。 2Dまたは3Dゲームをするような気がしたら、パイゲームを見てください。 –

関連する問題