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

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

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

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

Q&A

1回答

2084閲覧

プログレスバーを使用するための関数の呼び出し

seatyun

総合スコア1

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

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

0グッド

0クリップ

投稿2021/01/05 05:23

前提・実現したいこと

Pythonを勉強するためにTkinterを使用したアプリケーションを作成しています。
処理を実行していく中で、無くても問題ないのですがプログレスバーを使いたく、
他のサイト等で調べるなどしております。
実現したいことの大まかな流れとしては以下の通りです。
1と3の動作は問題なく動いております。

1.処理を実行(実行ボタンを押す)
2.プログレスバーが動く(「確定的」を使用)←今回はここが実現したい箇所
3.処理完了のメッセージが出る

まだ勉強時間が不足しているため、1つ1つの言葉を理解して使っておりません。
良い案がある方、書き方にはこだわっておりませんので、お手数ですがご教授お願い致します。

発生している問題・エラーメッセージ

発生している問題としましては、プログレスバーを動かすための関数が動かないこと。
エラーは出ることなく処理が完了しております。
呼び出し方が間違っているか、そもそも呼び出せないのかもわかっておりません。
使用しているソースコードはプログレスバーで検索して出たものをコピーしています。

該当のソースコード

#プログレスバーのコード class TestProgressbar(ttk.LabelFrame): def __init__(self, master=None): super().__init__(master) # progressbar self.progress = ttk.Progressbar(self, length=500) self.progress.configure( value=0, mode='determinate', maximum=50 ) self.progress.pack() def startbar(self): i = 1 while i <= 100: self.progress.configure(value=i) self.progress.update() i = i + 1 time.sleep(0.02) if __name__ == "__main__": f = TestProgressbar(master=root) f.pack(fill='x', side='bottom') #実行ボタンを押したときの処理 def p_start(): pgb = TestProgressbar() pgb.startbar() # 実行ボタン btn = tkinter.Button( root, text='実行', command=p_start, width=10) btn.place(x=280, y=280)

試したこと

理解をしてやっていることは特にありません。

補足情報(FW/ツールのバージョンなど)

pythonのバージョンは3.7.6でvscodeのバージョンは1.52.1を使用してます。

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

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

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

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

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

guest

回答1

0

Tkinterだと基本的に
・rootを定義して、最後にroot.mainloop()を書く
という形になります。

if name == "main":以下で
プログレスバーを生成し、packしていますが、
現状のコードだと、ボタンを押す都度新たに別のプログレスバーオブジェクトが生成されるような形になっています。
そして生成されたプログレスバーはpackされていないため、表示されません。

直し方の方針として、下記のように、
・プログレスバーの登録
・ボタンの登録
・ボタンを押したときの実行関数の指定
をひとまとめに行うやり方を考えてみました。

from tkinter import ttk, Tk import time class TestProgressbar(ttk.LabelFrame): def __init__(self, master=None): super().__init__(master) # progressbar self.progress = ttk.Progressbar(self, length=500) self.progress.configure( value=0, mode='determinate', maximum=100 # 100にしないと閉じた時エラーになる。 ) self.progress.pack() def startbar(self): i = 1 while i <= 100: self.progress.configure(value=i) self.progress.update() i = i + 1 time.sleep(0.02) if __name__ == "__main__": # まずrootを定義 root =Tk() # ウィンドウサイズの設定 root.geometry("600x600") pgb = TestProgressbar(master=root) pgb.pack(fill='x', side='bottom') # 実行ボタン # ボタンを押したら、プログレスバーのstartbar()関数を呼ぶ btn = ttk.Button( root, text='実行', command=lambda:pgb.startbar(), width=10) btn.place(x=280, y=280) # 実行するためのおまじない root.mainloop()

投稿2021/01/05 14:55

編集2021/01/05 14:56
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問