运行程序时的消息框或Progess栏

时间:2016-08-18 17:13:57

标签: python user-interface popup progress-bar easygui

我一直在为自己创建一个程序,我的公司最近想要使用它。然而,最终用户没有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

如果您绝对需要查看我的代码,我可以尝试重新创建它而不会泄露信息。上级人员会很感激我没有泄露有关这个项目的信息 - 安全性很紧张。

1 个答案:

答案 0 :(得分:2)

我为你写了一个小演示。不知道它是不是你想要的...... 该代码使用线程来更新进度条,同时执行其他操作。

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()

如果有帮助,请告诉我:)。