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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1861閲覧

Pythonでテキストボックスがすぐ表示されない

kakeru

総合スコア63

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/05/30 05:25

現状input_box.insertでテキストボックスに出力しても time.sleep(10) が終わるまで結果が表示されません。
本来は time.sleep(10)の所に色々処理を入れて途中でもテキストボックスを書き換えたいのですが、def file_select():が完了するまでテキストボックスが書き換えされません。
処理途中でもテキストボックス更新する方法が有りましたらご指導頂けないでしょうか。
よろしくお願いいたします。

Python

1import tkinter 2import time 3from tkinter import filedialog 4 5 6#ボタンがクリックされたら実行 7def file_select(): 8 idir = 'C:\\python_test' #初期フォルダ 9 filetype = [("テキスト","*.txt"), ("音楽","*.mp3"), ("すべて","*")] #拡張子の選択 10 file_path = tkinter.filedialog.askopenfilename(filetypes = filetype, initialdir = idir) 11 input_box.delete(0, tkinter.END) 12 input_box.insert(tkinter.END, file_path) #結果を表示 13 time.sleep(10) # 秒 14 15def file_select2(): 16 idir = 'C:\\python_test' #初期フォルダ 17 filetype = [("テキスト","*.txt"), ("音楽","*.mp3"), ("すべて","*")] #拡張子の選択 18 file_path = tkinter.filedialog.askopenfilename(filetypes = filetype, initialdir = idir) 19 input_box.insert(tkinter.END, file_path) #結果を表示 20 21#ウインドウの作成 22root = tkinter.Tk() 23root.title("Python GUI") 24root.geometry("600x240") 25 26#入力欄の作成 27input_box = tkinter.Entry(width=80) 28input_box.place(x=10, y=100) 29 30#ラベルの作成 31input_label = tkinter.Label(text="結果") 32input_label.place(x=10, y=70) 33 34#ボタンの作成 35button = tkinter.Button(text="参照",command=file_select) 36button.place(x=10, y=130) 37 38#ボタンの作成 39button = tkinter.Button(text="参照",command=file_select2) 40button.place(x=50, y=130) 41 42 43#ウインドウの描画 44root.mainloop()

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

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

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

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

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

melian

2022/05/30 05:36

time.sleep(10) の前に input_box.update() を入れてみて下さい。
kakeru

2022/05/30 06:01

有難う御座います。 input_box.update() を入れたらすぐ表示されました。
guest

回答1

0

ベストアンサー

通常のプログラムは何も工夫しなければ、1つのことしかできません。

GUIのプログラムも同様ですが、メインループが無限ループしていて、イベントの家訓、発生したイベントの処理、画面の更新、を順にやっています。
なので、イベントの処理(関数の実行)をしている間は画面は更新されません。

画面を強制的に更新することは「root.update()」で可能です。sleep(10)の前に入れればできます。
しかし、その場合も、「色々処理を入れて途中でもテキストボックスを書き換えたい」のためにはところどころでこれをやらなければならないし、そもそも、他のイベント(ボタンを押すとか)の処理はできません。

GUIのプログラムでそういうことをやる場合にどうするかは処理の内容によっていろいろ方法があります。別プロセス/スレッドにするとか、afterを使って定期的に動かすとか。
いろいろ調べてみるといいと思います。

投稿2022/05/30 06:02

TakaiY

総合スコア12743

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

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

kakeru

2022/05/31 05:59

表示更新したい時にroot.update()かinput_box.update()を使えばいいんですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問