diff --git a/PGUI.pyw b/PGUI.pyw new file mode 100644 index 0000000..d6c6e37 --- /dev/null +++ b/PGUI.pyw @@ -0,0 +1,83 @@ +from tkinter import Button as tButton +from tkinter import Tk, BOTH +from tkinter.ttk import Frame, Style, Button +import os +import subprocess +import winshell + + +def load_programs(): + directory = os.getenv('PGUI_DIR') + shortcuts = [os.path.join(directory, sname) for sname in os.listdir(directory)] + programs = [] + for shortcut in shortcuts: + name = os.path.splitext(os.path.basename(shortcut))[0] + shortcut = winshell.Shortcut(shortcut) + program = Program(name, f'{shortcut.path} {shortcut.arguments}') + programs.append(program) + return programs + + +class Program(): + def __init__(self, name, path): + self.name = name + self.path = os.path.abspath(path) + + def __str__(self): + return f'{self.name}: {self.path}' + + +class PGUILauncher(Frame): + def __init__(self, parent): + Frame.__init__(self, parent) + + self.parent = parent + self.init_ui() + + def launch_program(self, program): + print('opening application', program.name) + os.chdir(os.path.dirname(program.path)) + subprocess.Popen(program.path, shell=True) + self.quit() + + def init_ui(self): + self.parent.resizable(0,0) + self.parent.title("PGUI") + self.style = Style() + self.style.theme_use("clam") + self.pack(fill=BOTH, expand = 1) + + x = 0 + y = 0 + + self.buttonwidth = 12 + programs = load_programs() + for (programindex, program) in enumerate(programs): + print(y, x) + newButton = Button(self, text=program.name, command=lambda program=program: self.launch_program(program)) + print(f'creating button for {program.name} at {program.path}') + newButton.configure(width=self.buttonwidth) + newButton.grid(row=y, column=x) + x += 1 + if x >= 3 and (programindex != len(programs)-1): + x = 0 + y += 1 + print(y, x) + + self.pack() + self.update() + + width = self.parent.winfo_reqwidth() + height = self.parent.winfo_reqheight() + x_offset = (self.parent.winfo_screenwidth() - width) / 2 + y_offset = (self.parent.winfo_screenheight() - height) / 2 + + self.parent.geometry('%dx%d+%d+%d' % (width, height, x_offset, y_offset-50)) + +def main(): + root = Tk() + ex = PGUILauncher(root) + root.mainloop() + +if __name__ == '__main__': + main()