from tkinter import * from subprocess import check_output from os import getenv import webbrowser as wb def donothing(): filewin = Toplevel(root) button = Button(filewin, text="Do nothing button") button.pack() class Class: def __init__(self, title, cmd, category): self.title = title self.cmd = cmd self.category = category def toString(self): return self.title + "\n" + self.cmd + "\n" + self.category def runCmd(text): check_output(text, shell=False) root.destroy() def openPage(url): wb.get('windows-default').open(url) def buildRoot(): clearList = root.winfo_children() for child in clearList: child.destroy() menubar = Menu(root) filemenu = Menu(menubar, tearoff=0) catorclassremove = Menu(filemenu, tearoff=0) catorclassremove.add_command(label="Class", command=removeClass) catorclassremove.add_command(label="Category", command=removeCat) filemenu.add_command(label="Add", command=addClass) filemenu.add_cascade(label="Remove", menu=catorclassremove) filemenu.add_separator() filemenu.add_command(label="Exit", command=root.destroy) menubar.add_cascade(label="File", menu=filemenu) helpmenu = Menu(menubar, tearoff=0) helpmenu.add_command(label="Report Bug", command=(lambda *args: openPage('https://github.com/bMorgan01/WebinarsPy/issues'))) helpmenu.add_command(label="Github Repo", command=(lambda *args: openPage('https://github.com/bMorgan01/WebinarsPy'))) menubar.add_cascade(label="Help", menu=helpmenu) root.config(menu=menubar) widgets.clear() for cat in categories: widgets.append(Label(text=cat, font='Helvetica 18 bold')) for c in classes: if (c.category == cat): widgets.append(Button(text=c.title, command=(lambda *args: runCmd(c.cmd)))) for widget in widgets: widget.pack() def addClass(): add = Toplevel(root) add.attributes('-toolwindow', True) add.title("Add Class") label = Label(add, text="Title") entry = Entry(add) label1 = Label(add, text="Code") entry1 = Entry(add) label2 = Label(add, text="Password") entry2 = Entry(add) optFrame = Frame(add) label3 = Label(optFrame, text="Select Category") OptionList = ["New Category"] + categories variable = StringVar(add) variable.set(OptionList[0]) oldText = "new" catEntry = None def catSelected(text): nonlocal catEntry nonlocal oldText if (oldText != text): if (text == "New Category"): catEntry = Entry(optFrame) catEntry.pack(side=BOTTOM) else: catEntry.destroy() oldText = text variable.trace("w", lambda *args: catSelected(variable.get())) if (variable.get() == "New Category"): catSelected("New Category") opt = OptionMenu(optFrame, variable, *OptionList) def exitAdd(): add.destroy() add.update() def doneAdd(): cmd = getenv("APPDATA")+r"\Zoom\bin\Zoom.exe --url=zoommtg://zoom.us/join?action=join&confno="+entry1.get().strip() if (entry2.get().strip() != ""): cmd += (r"&pwd=" + entry2.get().strip()) if (variable.get() != "New Category"): cat = variable.get() else: cat = catEntry.get() categories.append(cat) classes.append(Class(entry.get(), cmd, cat)) exitAdd() buildRoot() writeFile() buttonFrame = Frame(add) okAdd = Button(buttonFrame, text="Ok", command=doneAdd) okCancel = Button(buttonFrame, text="Cancel", command=exitAdd) label.pack() entry.pack(padx=5) label1.pack() entry1.pack(padx=5) label2.pack() entry2.pack(padx=5) optFrame.pack() label3.pack() opt.pack() buttonFrame.pack() okAdd.pack(side=LEFT) okCancel.pack(side=RIGHT) add.mainloop() def removeCat(): removeCatWin = Toplevel(root) removeCatWin.attributes('-toolwindow', True) removeCatWin.title("Remove Category") label = Label(removeCatWin, text="Pick Category") variable = StringVar(removeCatWin) variable.set(categories[0]) catDropDown = OptionMenu(removeCatWin, variable, *categories) label1 = Label(removeCatWin, text="This will remove all classes in the category.") def exitRemoveCat(): removeCatWin.destroy() removeCatWin.update() def doneRemoveCat(): for cat in categories[:]: if (cat == variable.get()): for c in classes[:]: if (c.category == cat): classes.remove(c) categories.remove(cat) exitRemoveCat() buildRoot() writeFile() buttonFrame = Frame(removeCatWin) okAdd = Button(buttonFrame, text="Ok", command=doneRemoveCat) okCancel = Button(buttonFrame, text="Cancel", command=exitRemoveCat) label.pack() catDropDown.pack() label1.pack() buttonFrame.pack() okAdd.pack(side=LEFT) okCancel.pack(side=RIGHT) removeCatWin.mainloop() def removeClass(): removeClassWin = Toplevel(root) removeClassWin.attributes('-toolwindow', True) removeClassWin.title("Remove Class") label = Label(removeClassWin, text="Pick Class") variable = StringVar(removeClassWin) variable.set(classes[0].title) classList = list() for c in classes: classList.append(c.title) classDropDown = OptionMenu(removeClassWin, variable, *classList) def exitRemoveClass(): removeClassWin.destroy() removeClassWin.update() def doneRemoveClass(): for c in classes[:]: if (c.title == variable.get()): classes.remove(c) exitRemoveClass() buildRoot() writeFile() buttonFrame = Frame(removeClassWin) okAdd = Button(buttonFrame, text="Ok", command=doneRemoveClass) okCancel = Button(buttonFrame, text="Cancel", command=exitRemoveClass) label.pack() classDropDown.pack() buttonFrame.pack() okAdd.pack(side=LEFT) okCancel.pack(side=RIGHT) removeClassWin.mainloop() def writeFile(): f = open("webinars.dat", "w") for cat in categories: f.write(cat + "\n") f.write("\n") for c in classes: f.write(c.toString() + "\n") f.close() def readFile(): classRead = False f = open("webinars.dat", "r") while (True): inText = f.readline() if (inText.strip() == ""): if (not classRead): classRead = True else: break else: if (classRead): classes.append(Class(inText[:-1], f.readline()[:-1], f.readline()[:-1])) else: categories.append(inText[:-1]) f.close() categories = list() classes = list() widgets = list() readFile() root = Tk() root.title("Webinars") root.option_add('*Font', '19') root.attributes("-toolwindow",1) buildRoot() root.mainloop()