Skip to content

Instantly share code, notes, and snippets.

@alchemyst
Created August 22, 2017 04:56
Show Gist options
  • Save alchemyst/4364d14dbb37fc7e3770d07db97f8e99 to your computer and use it in GitHub Desktop.
Save alchemyst/4364d14dbb37fc7e3770d07db97f8e99 to your computer and use it in GitHub Desktop.
Multi-segment progress bar proof of concept
#!/usr/bin/env python
import tkinter as tk
import time
import random
Nsegments = 100
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.pack()
self.create_widgets()
self.running = False
self.segmentstatus = [0 for i in range(Nsegments)]
self.update_segments()
def create_widgets(self):
self.barcontainer = tk.Frame(self)
self.barcontainer.pack(side="top")
self.segments = [tk.Frame(self.barcontainer, height=10, width=5)
for i in range(Nsegments)]
for segment in self.segments:
segment.pack(side='left')
self.run = tk.Button(self, text='Run', command=self.run)
self.run.pack(side='bottom')
self.quit = tk.Button(self, text="QUIT", fg="red",
command=root.destroy)
self.quit.pack(side="bottom")
def run(self):
self.running = True
self.run['state'] = 'disabled'
self.update_segments()
def stoprunning(self):
self.running = False
self.run['state'] = 'normal'
def update_segmentstatus(self):
toupdate = random.choice([i for i, s in enumerate(self.segmentstatus)
if s == 0])
self.segmentstatus[toupdate] = 1
if all(s == 1 for s in self.segmentstatus):
self.stoprunning()
return self.segmentstatus
def update_segments(self):
if not self.running:
return
segmentstatus = self.update_segmentstatus()
for i, segment in enumerate(self.segments):
if segmentstatus[i] == 0:
segment['background'] = ''
else:
segment['background'] = 'green'
self.after(100, self.update_segments)
root = tk.Tk()
app = Application(master=root)
app.mainloop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment