Last active
August 8, 2016 16:05
-
-
Save avamsi/9af5f9cda0e3a5fcf5e6ed15c1126854 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from threading import Thread | |
from tkinter import Tk | |
from tkinter.ttk import Progressbar | |
from queue import Queue | |
class ProgressDialog(object): | |
def __init__(self, name, maximum): | |
self._dialog = Tk() | |
self._max = maximum | |
self._set_properties(name) | |
self._add_progress_bar() | |
def _set_properties(self, name): | |
self._dialog.geometry('420x42+-10+0') | |
self._dialog.title(name) | |
self._dialog.resizable(0, 0) | |
self._dialog.bind('<Escape>', self._close) | |
def _add_progress_bar(self): | |
self._progressbar = Progressbar(self._dialog, length=400, maximum=self._max) | |
self._progressbar.pack() | |
self._progressbar.pack(pady=10) | |
def _set_progress(self, value): | |
self._progressbar['value'] = value | |
progress = property(fset=_set_progress) | |
def show(self): | |
self._dialog.focus_force() | |
self._dialog.after(100, self._poll) | |
self._dialog.mainloop() | |
def _poll(self): | |
if self._progressbar['value'] >= self._max: | |
self._close() | |
self._dialog.after(100, self._poll) | |
def _close(self, event=None): | |
self._dialog.quit() | |
def progress_dialog_async(*args, **kwargs): | |
progress_dialog_queue = Queue() | |
def create_progress_dialog(): | |
progress_dialog = ProgressDialog(*args, **kwargs) | |
progress_dialog_queue.put(progress_dialog) | |
progress_dialog.show() | |
Thread(target=create_progress_dialog).start() | |
return progress_dialog_queue.get() | |
if __name__ == '__main__': | |
import time | |
dialog = progress_dialog_async('blah', 100) | |
for i in range(1, 101): | |
dialog.progress = i | |
time.sleep(.02) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment