ComputerKeeper/main.py
Josh b d88057366b
All checks were successful
Potlatch Loggers Organization/ComputerKeeper/pipeline/head This commit looks good
working on filter
2022-10-13 17:58:26 -07:00

118 lines
4.0 KiB
Python

"""This is the main function"""
from copy import deepcopy
import PySimpleGUI as sg
from tinydb import TinyDB, Query
TABLE=None
WINDOW=None
# Define the window's contents
colum_lut = ["Serial Number","Brand","Grade","Name"]
layout = [[sg.Menu([['File', ['Open', 'Save', 'Add Computer','Remove Computer']]])],
[sg.Text("search"), sg.Input(s=(35,))],
[sg.Input(s=(19,),enable_events=True,key="filter Serial Number"),
sg.Input(s=(6,),enable_events=True,key="filter Brand"),
sg.Input(s=(6,),enable_events=True,key="filter Grade"),
sg.Input(s=(4,),enable_events=True,key="filter Name")],
[sg.Table([["word","Yes"]],colum_lut,key = "table", enable_events=True)],
[sg.Text("Serial Number")],
[sg.Input(key='Serial Number')],
[sg.Text("Brand")],
[sg.Input(key='Brand')],
[sg.Text("Grade")],
[sg.Input(key='Grade')],
[sg.Text("Name")],
[sg.Input(key='Name')],
[sg.Text(size=(40,1), key='OUTPUT')],
[sg.Button('Check In'), sg.Button('Check Out')]]
add_computer_layout = [[sg.Text("Serial Number")],
[sg.Input(key='Serial Number')],
[sg.Text("Brand")],
[sg.Input(key='Brand')],
[sg.Text("Grade")],
[sg.Input(key='Grade')],
[sg.Text("Name")],
[sg.Input(key='Name')],
[sg.Button('Add Computer'),]]
def double_click(event):
"""
Additional event for double-click on header
event: class event
"""
region = TABLE.identify("region", event.x, event.y)
if region == 'heading': # Only care double-clock on headings
cid = int(TABLE.identify_column(event.x)[1:])-1 # check which column clicked
WINDOW.write_event_value("-TABLE-DOUBLE-CLICK-", cid)
def add_computer():
window = sg.Window('Add Computer', deepcopy(add_computer_layout))
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED or event == 'Add Computer':
break
# Finish up by removing from the screen
window.close()
return values
def main():
"""Core of ComputerKeeper - The Main Application."""
global TABLE,WINDOW
db= TinyDB("./db.json")
Computer = []
for item in db.all():
The_Device = []
for colum in colum_lut:
The_Device.append(item[colum])
Computer.append(The_Device)
# Create the window
window = sg.Window('Window Title', layout, finalize=True)
WINDOW=window
window["table"].update(Computer)
table = window['table'].Widget
table.bind('<Double-1>', double_click, add='+')
TABLE=table
# Display and interact with the Window using an Event Loop
while True:
event, values = window.read()
# See if user wants to quit or window was closed
if event == sg.WINDOW_CLOSED or event == 'Quit':
break
if event == 'Add Computer':
new_computer = add_computer()
existing_table = window["table"].get()
existing_table.append( list(new_computer.values()))
window["table"].update(existing_table)
db.insert(new_computer)
elif event == 'Remove Computer':
if values["table"]:
existing_table = window["table"].get()
serial = existing_table.pop(values["table"][0])[0]
query = Query()
db.remove(query["Serial Number"] == serial)
window["table"].update(existing_table)
elif event == '-TABLE-DOUBLE-CLICK-':
column = values[event]
print(f'Click on column {column}')
# Sort data on the table by the value of column
# then update window['-TABLE-'].update(values=new_data)
else:
print(event, values[event])
Computers=Query()
print(db.search(Computers[event[7:]].find(values[event])!=-1))
# Finish up by removing from the screen
window.close()
if __name__ == "__main__":
main()