質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.76%

  • Python 3.x

    5318questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

python tkinterのtextに文字を出力したいです。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 255

mono_

score 20

タイトルに書いてある動きを再現したいのですがなかなかうまくいきません。

例えばメインのフレームにtextとボタンだけがあってボタンのイベント内容は

def mozi_test(event):
    print('こんにちは')
    time.sleep(2)
    print('ありがとう')

のようなイベントだとして、この状態でボタンを押してもコマンドプロンプトに
こんにちはの2秒後にありがとうが表示されるだけだと思います。

この表示をtkinter内にプリントする事は可能でしょうか?

ご存知の方いらっしゃいましたらよろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

Tkinterに限らず一般に典型的なGUIアプリは、

  • まず決まった画面構成を作り初期表示
  • ユーザーの操作によって画面を構成する部品の状態(表示内容だの色だのの見栄え)を変化させる

という具合に設計します。tkinter.Entry、tkinter.Text、tkinter.Labelなどのウィジェットがテキストを表示できますのでそれらを使うとよいでしょう。また一定時間経過後になにかしたいならafterメソッドを用います。sleepは通常使いません。理由はsleepしてしまうとその間ユーザーの操作を受け付けなくなってしまうからです。ということでTextを用いた簡単なサンプルを書いてみました。

import tkinter as tk


class App(tk.Frame):
    def __init__(self, master, *args, **kwargs):
        super().__init__(master, *args, **kwargs)
        self.pack(side=tk.TOP, fill=tk.BOTH, expand=True)

        self.text = tk.Text(self, width=40, height=10)
        self.text.pack(side=tk.TOP)
        self.text.insert(tk.END, 'hello\n')

        self.button = tk.Button(self, text='button', command=self.on_click)
        self.button.pack(side=tk.TOP)

    def on_click(self):
        self.text.insert(tk.END, 'clicked\n')
        self.after(2000, self.on_expired)

    def on_expired(self):
        self.text.insert(tk.END, 'expired\n')


if __name__ == '__main__':
    root = tk.Tk()
    App(root)
    root.mainloop()

このサンプルで2回連続してボタンをクリックしてみてください。sleepを使うとこういう動きができないということを覚えておくと良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/03 08:16

    とても丁寧なご回答ありがとうございます。
    単純なスリープでは難しいんですね。
    .afterで何とか出来そうです。
    MasahikoHirataさん
    tkinterでprintは良くない表現でした。
    今後気を付けようと思います。

    キャンセル

0

tkinterで文字を出力は'print'では無いのでは?
例えばtextboxならば

    Editbox.insert()


とか
labelならば

    tkinter.label(text=u"出したい文字")


など。(Editboxとかtkinter.labelなどは任意の物を使って)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python 3.x

    5318questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。