cmd/PGUI.pyw

86 lines
2.5 KiB
Python

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.path.join(os.path.dirname(__file__), 'PGUI')
shortcuts = [os.path.join(directory, p) for p in os.listdir(directory)]
shortcuts = [p for p in shortcuts if p.lower().endswith('.lnk')]
programs = []
for shortcut in shortcuts:
name = os.path.splitext(os.path.basename(shortcut))[0]
shortcut = winshell.Shortcut(shortcut)
program = Program(name, shortcut.path, shortcut.arguments)
programs.append(program)
return programs
class Program():
def __init__(self, name, path, arguments):
self.name = name
self.path = os.path.abspath(path)
self.arguments = arguments
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))
command = f'{program.path} {program.arguments}'
subprocess.Popen(command, 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()