2016-08-18 72 views
0

自分でプログラムを作成していましたが、最近私の会社はそれを使いたいと考えています。しかし、エンドユーザはPythonの経験がないので、EasyGUIを使ってGUIを作っています。彼らがしなければならないのはデスクトップ上のショートカットをクリックすることです(私はpythonw.exeを使用しているため、ボックスは表示されません)。プロセスの実行には約10秒かかりますが、実行すると空白の画面が表示されます。プログラム実行中のメッセージボックスまたはプログレスバー

私の質問は次のとおりです。機能の実行中に「実行中...」と表示され、プロセス全体が完了したら閉じることができますか?

ボーナスポイント:プロセスの実行中に進行状況バーが表示されます。

私はいくつかの検索をしましたが、このようなもののいくつかは私の頭の上にあります(私はかなりPythonを始めました)。私はこれらの部分を自分のコードに組み込む方法がわかりません。私の問題を解決するためにEasyGUIのような簡単なものはありますか?ありがとう!

関連記事: Python- Displaying a message box that can be closed in the code (no user intervention)

How to pop up a message while processing - python

Python to print out status bar and percentage

あなたは絶対に私のコードを参照する必要がある場合、私は情報を配ってなくて、それを試してみて、再作成することができます。上司はこのプロジェクトに関する情報を譲り渡さないことに感謝します。

+0

助けなら、私に教えてください。簡単な例があります:http://tkinter.unpythonic.net/wiki/ProgressBar – Peter234

+0

@ Peter234、プロセスが完了すると、そのメッセージボックスはどのようにして停止しますか? – MattR

+0

私の例をチェックしてください:) – Peter234

答えて

0

私は少しデモを書いています。それがまさにあなたが望んでいたかどうかわからない... コードはスレッドを使ってプログレスバーを更新しますが、他の作業をしています。

import time 
import threading 
try: 
    import Tkinter as tkinter 
    import ttk 
except ImportError: 
    import tkinter 
    from tkinter import ttk 


class GUI(object): 

    def __init__(self): 
     self.root = tkinter.Tk() 

     self.progbar = ttk.Progressbar(self.root) 
     self.progbar.config(maximum=10, mode='determinate') 
     self.progbar.pack() 
     self.i = 0 
     self.b_start = ttk.Button(self.root, text='Start') 
     self.b_start['command'] = self.start_thread 
     self.b_start.pack() 

    def start_thread(self): 
     self.b_start['state'] = 'disable' 
     self.work_thread = threading.Thread(target=work) 
     self.work_thread.start() 
     self.root.after(50, self.check_thread) 
     self.root.after(50, self.update) 

    def check_thread(self): 
     if self.work_thread.is_alive(): 
      self.root.after(50, self.check_thread) 
     else: 
      self.root.destroy()   


    def update(self): 
     #Updates the progressbar 
     self.progbar["value"] = self.i 
     if self.work_thread.is_alive(): 
      self.root.after(50, self.update)#method is called all 50ms 

gui = GUI() 

def work(): 
    #Do your work :D 
    for i in range(11): 
     gui.i = i 
     time.sleep(0.1) 


gui.root.mainloop() 

それは私のpythonからTkinterのパッケージを見てすることができことをお勧め:)

+0

うわー!ありがとう。これは私の頭の上の少し笑です。私はそれがバーが飛び出して実行することができないようです:(tkinterやttk、あるいはプログレスバーのドキュメントはありますか?モジュールに含まれている関数についてのドキュメントは見つかりません。 - それはあまり有用ではありません。Pythonでは各モジュールの言語に似ていることに気付いています。@ Peter234、本当にありがたいです。 – MattR

+0

@MattR:このスクリプトはPython 3用ではありませんPython 2.7おそらくこれが問題です。tkinterの情報はこちら:https://docs.python.org/3/library/tkinter.html?highlight=tkinter#module-tkinter – Peter234

+0

@MattR:コードを変更しましたこれはPython 2.7とPython 3で動作します:) – Peter234

関連する問題