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

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

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

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

Python

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

Q&A

1回答

15913閲覧

ループの処理中にGUIでプログレスバーを表示したい

MountDown

総合スコア9

Python 3.x

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

Python

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

1グッド

1クリップ

投稿2021/01/19 04:35

編集2021/01/20 02:32

ループを回している間に進捗状況が分かる様にTkinterでプログレスバーを表示したいのですが、
処理と同時に動かすことが出来ていません・・・
こういう場合は並列で処理をさせるものなのでしょうか?
よろしくお願いいたします。

import time import tkinter def button_click(): root.destroy() num = 0 while num < 10: time.sleep(1) print("num = " + str(num)) num += 1 print("End") root = tkinter.Tk() root.title('このウインドウは開始すると閉じます') root.geometry("350x100") Static1 = tkinter.Label(text=u'これからループ開始します\ntkinterとか使ってGUIのプログレスバーの進捗確認て終わったら閉じたい\nコンソールが非表示にならない') Static1.pack() btn = tkinter.Button(root, text='開始', command=button_click) btn.place(x=150, y=70) root.mainloop()

※回答ありがとうございます。
サンプルをデバッグしてみて動きはわかりました。ありがとうございます。
今、わたしが作っているものに組み込みたいと思っているのですが・・・どのようにしたらよいかやってみていたらぐちゃぐちゃになってしまい
混乱してしまいました。。。
もし、ヒントでもいただけると嬉しいです。。。

import time import tkinter import tkinter.ttk as ttk import os.path from datetime import datetime file_path = r'C:\temp' file_name = f"{datetime.now():%Y%m%d}.md" chk_path = os.path.join(file_path, file_name) def button_click(): root.destroy() #←ここでウィンドウを1回落としている。この後プログレスバーが出ない #プログレスバーの初期設定?? progressbar = ttk.Progressbar( root, orient="horizontal", length=300, mode="determinate") progressbar.pack() maximum_bar = 10 value_bar = 0 div_bar = 1 progressbar.configure(maximum=maximum_bar, value=value_bar) #プログレスバーの更新 def var_start(value_bar): progressbar.configure(value=value_bar) num = 0 bool1 = True #60秒間ファイルが出来るか探している→見つかった時点で終了 #60秒経過しても見つからない場合も終了 #forでのやり方? while( not( os.path.isfile(chk_path))): time.sleep(1) num += 1 print("num = " + str(num)) if num < 60 and os.path.isfile(chk_path): os.remove(chk_path) bool1 = True break elif num > 60: bool1 = False break print("End") root = tkinter.Tk() root.title('このウインドウは開始すると閉じます') root.geometry("350x100") Static1 = tkinter.Label(text=u'これからループ開始します\ntkinterとか使ってGUIのプログレスバーの進捗確認て終わったら閉じたい\nコンソールが非表示にならない') Static1.pack() btn = tkinter.Button(root, text='開始', command=button_click) btn.place(x=150, y=70) root.mainloop() #ボタンとテキストラベルの作成 #button = tk.Button(text=u"START", command=Click) #button.pack() text_label = tkinter.StringVar() text_label.set("0") label = tkinter.Label(textvariable=text_label) label.pack() root.mainloop()
kuwagata_1227👍を押しています

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

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

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

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

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

guest

回答1

0

一例ですが、下記記事のプログレスバーを表示するコードサンプルをもとに、ご提示のコードを修正してみました。

処理は並行稼働できます。

【python】【tkinter】【初心者】プログレスバーを使ってみる

 

プログレスバーの初期設定 を変えることで、進捗率の取り方を変えることが出来るようです。

python

1import tkinter as tk 2import tkinter.ttk as ttk 3 4num = 0 5 6root = tk.Tk() 7root.title("プログレスバー") 8 9 10#プログレスバーの初期設定 11progressbar = ttk.Progressbar( 12 root, orient="horizontal", length=300, mode="determinate") 13progressbar.pack() 14maximum_bar = 10 15value_bar = 0 16div_bar = 1 17progressbar.configure(maximum=maximum_bar, value=value_bar) 18 19 20#プログレスバーの更新 21def var_start(value_bar): 22 progressbar.configure(value=value_bar) 23 24 25#ボタンを押したら1秒ずつカウント、maximumに達したら終了しましたを表示 26def Click(): 27 global value_bar, div_bar, text_label, num 28 for i in range(maximum_bar): 29 value_bar += div_bar 30 text_label.set(str(value_bar)) 31 32 print("num = " + str(num)) 33 num += 1 34 35 if value_bar == maximum_bar: 36 progressbar.after(1000, var_start(value_bar)) 37 print("num = " + str(num)) 38 text_label.set("終了しました") 39 root.destroy() 40 41 else: 42 progressbar.after(1000, var_start(value_bar)) 43 progressbar.update() 44 45 46#ボタンとテキストラベルの作成 47button = tk.Button(text=u"START", command=Click) 48button.pack() 49text_label = tk.StringVar() 50text_label.set("0") 51label = tk.Label(textvariable=text_label) 52label.pack() 53 54root.mainloop()

 
進捗率が表せず、処理中であることのみを示す場合は、下記記事の ”不確定モード” と呼んでいるタイプのものをお使いになると良いかと思います。

【Python GUIサンプル】TkinterでProgressbar(プログレスバー)を使ってみる

 
<ご参照>
過去質問(自己解決);
Python: TkInter プログレスバーの進行を データの出力の進行具合に使いたい

投稿2021/01/19 06:10

編集2021/01/19 06:28
_whitecat_22

総合スコア1305

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問