2016-08-18 6 views
0

나는 나 자신을 위해 프로그램을 만들었고 내 회사는 최근 그것을 사용하려고합니다. 그러나 최종 사용자에게는 파이썬 경험이 없으므로 EasyGUI를 사용하여 GUI를 만들고 있습니다. 그들이해야 할 일은 바탕 화면에서 바로 가기를 클릭하는 것입니다 (pythonw.exe를 사용하므로 아무 상자도 나타나지 않습니다). 프로세스를 실행하는 데 약 10 초가 걸리지 만 빈 화면이 나타납니다.프로그램을 실행하는 동안 메시지 상자 또는 Progess Bar

내 질문은 : 전체 프로세스가 완료 될 때 함수가 실행되고 닫히는 동안 "실행 중 ..."이라는 메시지 상자를 가질 수 있습니까?

보너스 포인트 : 프로세스가 진행되는 동안 진행 막대가 있습니다.

이제 검색을 해봤지만 일부는 내 머리 위로 넘어갔습니다 (필자는 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

난 당신이 파이썬에서 Tkinter의 패키지를 살펴 가지고 제안을 도움이되는지 알려주세요. 다음은 간단한 예제입니다 : 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() 

그 :)

+0

와우! 고마워. 이것은 나의 머리 하하 위에 조금있다. 비록 바, 함께 팝업을 실행할 얻을 수 없습니다 :(tkinter 또는 ttk 또는 심지어 progressbar에 대한 설명서가 있습니까? 모듈에있는 기능에 대한 모든 설명서를 찾을 수 없습니다. - 그들은별로 도움이되지 않습니다. 나는 파이썬에서 각 모듈마다 다른 언어를 사용한다는 것을 알았습니다. @ 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 : 코드를 변경했습니다. 파이썬 2.7과 파이썬 3에서 작동합니다 :) – Peter234