Add PGUI.pyw.
This commit is contained in:
parent
ad667d0a17
commit
9e5c699871
1 changed files with 83 additions and 0 deletions
83
PGUI.pyw
Normal file
83
PGUI.pyw
Normal file
|
@ -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()
|
Loading…
Reference in a new issue