2016-11-03 99 views
0

私はプロジェクトのGUIを作っています。私の監督は、プログラムの各反復に最大7分かかる可能性があるため、プログレスバーを含めるように求めました。メインウィンドウを閉じずにTkinterポップアップを自動的に閉じる

私はプログレスバーを別のウィンドウでポップアップし、プロセスが終了した後に閉じるが、現在の理解では、手動でポップアップを閉じるか、GUI全体を一度に閉じる必要があります。

これは、私はストレートのpythonが付属していません余分なモジュールをダウンロードしないようしたい可能であれば、私は

import Tkinter as tk 
from ttk import Progressbar 
from os import listdir 
import threading 
import time 
root = tk.Tk() 
root.title("TCC Image Processing") 



def create_tcc(input_bar, input_progress_dialog): 


    input_bar['maximum'] = 5 
    input_bar['value'] = 0 
    for x in range(5): 
     time.sleep(1) 
     input_bar['value'] += 1 
    # this line is where the touble seems to be 
    input_progress_dialog.destroy() 


def run_tcc(): 
    progress_dialog = tk.Toplevel() 
    progress_dialog.title("TCC Processing") 

    bar = Progressbar(progress_dialog, orient="horizontal", length=500, value=0, mode="determinate") 
    bar.grid(row=4, columnspan=2) 
    t = threading.Thread(target=create_tcc, args=(bar, progress_dialog)) 
    t.start() 
tcc_run_button = tk.Button(root, text="RUN", command=lambda:run_tcc()) 
tcc_run_button.pack() 

root.mainloop() 

を使用しているコードの簡易版です。

+0

その他:グローバルな 'root'、' run_tcc.root2'、 'create_tcc.root'という名前の類似点は混乱します。ローカル変数のどちらも実際にアプリケーションのプライマリウィンドウを参照していないので、 'progress_dialog'のような別の変数名を選択することができますか? –

+0

あなたのコードは、現在編集されているフォームで完全に動作します。あなたは今それでどんな問題を抱えていますか? –

+0

上記のコードが実行され、ボタンをクリックすると、プログレスバーが表示されたポップアップが表示されます。バーは4回歩き、5回踏み込むと停止します。現在のバージョンのコードで5回踏み込んだ唯一の時間は、プログラムがクラッシュし、問題が発生したという新しいポップアップが現れたことです。 – cforeman

答えて

1

タスクが終了した後に.destroy()~progress_dialogと呼び出します。

これは、アプリケーション全体を強制終了することなくポップアップを安全に終了します。

+0

私の場合、.destroy()を使用すると、プログレスバーが80%まで読み込まれ、停止して開いたままになります。 – cforeman

関連する問題