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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

3回答

6781閲覧

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

yahho

総合スコア28

Python 3.x

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

0グッド

0クリップ

投稿2018/06/02 20:38

編集2018/06/02 20:45

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

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

python

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

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

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

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

Python

1import tkinter as tk 2 3 4class App(tk.Frame): 5 def __init__(self, master, *args, **kwargs): 6 super().__init__(master, *args, **kwargs) 7 self.pack(side=tk.TOP, fill=tk.BOTH, expand=True) 8 9 self.text = tk.Text(self, width=40, height=10) 10 self.text.pack(side=tk.TOP) 11 self.text.insert(tk.END, 'hello\n') 12 13 self.button = tk.Button(self, text='button', command=self.on_click) 14 self.button.pack(side=tk.TOP) 15 16 def on_click(self): 17 self.text.insert(tk.END, 'clicked\n') 18 self.after(2000, self.on_expired) 19 20 def on_expired(self): 21 self.text.insert(tk.END, 'expired\n') 22 23 24if __name__ == '__main__': 25 root = tk.Tk() 26 App(root) 27 root.mainloop()

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

投稿2018/06/02 22:51

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yahho

2018/06/02 23:16

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

0

おはようございます。

問題文読ませていただきました。

こんな感じでいかがでしょうか?

python

1import tkinter as tk 2 3 4class App(tk.Frame): 5 # text Widgetの末尾に「こんにちは」を追記する関数 6 def onClick(self): 7 # text Widgetの末尾に「こんにちは」を追記する。 8 # tk.End : 末尾 9 self.text.insert(tk.END, 'こんにちは\n') 10 # after関数を利用して、2秒後にonExpired関数を実行する。 11 # 第一引数 : どのくらい遅らせて第二引数を実行するのか、時間設定する(単位はミリ秒) 12 # 第二引数 : 実行する関数名 13 # afterについて : https://kuroro.blog/python/ngQRGzqfuyK8WaCwkGid/ 14 self.after(2000, self.onExpired) 15 16 # text Widgetの末尾に「ありがとう」を追記する関数 17 def onExpired(self): 18 # text Widgetの末尾に「ありがとう」を追記する。 19 # tk.End : 末尾 20 self.text.insert(tk.END, 'ありがとう\n') 21 22 def __init__(self, master): 23 super().__init__(master) 24 25 # Windowを親要素として、frame Widget(Frame)を作成する。 26 # Frameについて : https://kuroro.blog/python/P20XOidA5nh583fYRvxf/ 27 frame = tk.Frame(self.master) 28 # Windowを親要素として、frame Widget(Frame)をどのように配置するのか? 29 # gridについて : https://kuroro.blog/python/JoaowDiUdLAOj3cSBxiX/ 30 frame.grid() 31 32 # frame Widget(Frame)を親要素として、text Widgetを作成する。 33 # width : 幅の設定 34 # height : 高さの設定 35 # Textについて : https://kuroro.blog/python/bK6fWsP9LMqmER1CBz9E/ 36 self.text = tk.Text(frame, width=40, height=10) 37 # frame Widget(Frame)を親要素として、text Widgetをどのように配置するのか? 38 # gridについて : https://kuroro.blog/python/JoaowDiUdLAOj3cSBxiX/ 39 self.text.grid() 40 # text Widgetの初期値として、piyoの値を格納する。 41 self.text.insert(tk.END, 'piyo\n') 42 43 # frame Widget(Frame)を親要素として、button Widgetを作成する。 44 # text : テキスト情報 45 # command : ボタンをクリックした場合に、実行する関数を設定 46 # Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/ 47 button = tk.Button(frame, text='button', command=self.onClick) 48 # frame Widget(Frame)を親要素として、button Widgetをどのように配置するのか? 49 # gridについて : https://kuroro.blog/python/JoaowDiUdLAOj3cSBxiX/ 50 button.grid() 51 52 53if __name__ == '__main__': 54 # Windowを描画する。 55 root = tk.Tk() 56 App(root) 57 # Windowをループさせて、継続的にWindow表示させる。 58 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/ 59 root.mainloop()

ご確認のほど、よろしくお願いいたします。????‍♂️

投稿2021/06/12 01:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

tkinter

1 Editbox.insert()

とか
labelならば

tkinter

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

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

投稿2018/06/02 20:50

MasahikoHirata

総合スコア3747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問