mirror of
https://github.com/kristoferssolo/LU-bookstore.git
synced 2025-10-21 18:00:34 +00:00
feat(gui): display inventory
This commit is contained in:
parent
3ef55892da
commit
74ee80337d
@ -1,10 +1,16 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from bookstore.inventory import Inventory
|
||||||
from ui.app import App
|
from ui.app import App
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
def main() -> None:
|
||||||
app = App()
|
db_path = Path("db.sqlite3")
|
||||||
|
inventory = Inventory(db_path)
|
||||||
|
app = App(inventory)
|
||||||
app.run()
|
app.run()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,9 +1,34 @@
|
|||||||
import npyscreen as nps
|
import customtkinter as ctk
|
||||||
|
from bookstore.book import Book
|
||||||
from .forms import AddBookForm, BookForm
|
from bookstore.inventory import Inventory
|
||||||
|
|
||||||
|
|
||||||
class App(nps.NPSAppManaged):
|
class App(ctk.CTk):
|
||||||
def onStart(self):
|
def __init__(self, inventory: Inventory, *args, **kwargs) -> None:
|
||||||
self.addForm("MAIN", BookForm, name="Bookstore")
|
super(App, self).__init__(*args, **kwargs)
|
||||||
self.addForm("ADD_BOOK", AddBookForm, name="Add Book")
|
self.inventory = inventory
|
||||||
|
|
||||||
|
self.geometry("600x400")
|
||||||
|
self.title("Bookstore")
|
||||||
|
ctk.set_appearance_mode("system")
|
||||||
|
self.resizable(width=True, height=True)
|
||||||
|
self.data = inventory.list_all()
|
||||||
|
|
||||||
|
self.display_table()
|
||||||
|
|
||||||
|
def display_table(self) -> None:
|
||||||
|
headers = Book.fields()
|
||||||
|
for col, header in enumerate(headers):
|
||||||
|
label = ctk.CTkLabel(self, text=header)
|
||||||
|
label.grid(row=0, column=col, padx=10, pady=5)
|
||||||
|
|
||||||
|
widths = [100, 100, 100, 100, 100]
|
||||||
|
for row, book in enumerate(self.data, start=1):
|
||||||
|
for col, value in enumerate(book):
|
||||||
|
entry = ctk.CTkLabel(self, width=widths[col], text=value)
|
||||||
|
entry.grid(row=row, column=col, padx=10, pady=5)
|
||||||
|
|
||||||
|
|
||||||
|
def run(self) -> None:
|
||||||
|
self.mainloop()
|
||||||
|
|
||||||
|
|||||||
@ -1,24 +0,0 @@
|
|||||||
import npyscreen as nps
|
|
||||||
from bookstore.book import Book
|
|
||||||
|
|
||||||
from .utils import INVENTORY
|
|
||||||
from .widget import BookGrid
|
|
||||||
|
|
||||||
|
|
||||||
class BookForm(nps.FormBaseNew):
|
|
||||||
def create(self):
|
|
||||||
self.grid = self.add_widget(BookGrid, columns=5, select_whole_line=True, col_titles=Book.fields())
|
|
||||||
self.grid.values = [book.values() for book in INVENTORY.list_all()]
|
|
||||||
|
|
||||||
|
|
||||||
class AddBookForm(nps.ActionForm):
|
|
||||||
def create(self):
|
|
||||||
self.isbn = self.add(nps.TitleText, name="ISBN:")
|
|
||||||
self.title = self.add(nps.TitleText, name="Title:")
|
|
||||||
self.author = self.add(nps.TitleText, name="Author:")
|
|
||||||
self.price = self.add(nps.TitleText, name="Price:")
|
|
||||||
self.stock = self.add(nps.TitleText, name="Stock:")
|
|
||||||
|
|
||||||
def on_ok(self):
|
|
||||||
book = Book(self.isbn.value, self.title.value, self.author.value, self.price.value, self.stock.value)
|
|
||||||
INVENTORY.add(book)
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
from pathlib import Path
|
|
||||||
|
|
||||||
from bookstore.inventory import Inventory
|
|
||||||
|
|
||||||
INVENTORY = Inventory(Path("db.sqlite3"))
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
import npyscreen as nps
|
|
||||||
|
|
||||||
|
|
||||||
class BookGrid(nps.GridColTitles):
|
|
||||||
def custom_print_cell(self, actual_cell, cell_display_value):
|
|
||||||
if actual_cell == 4:
|
|
||||||
if int(cell_display_value) == 0:
|
|
||||||
actual_cell.color = "DANGER"
|
|
||||||
elif int(cell_display_value) < 5:
|
|
||||||
actual_cell.color = "WARNING"
|
|
||||||
else:
|
|
||||||
actual_cell.color = "DEFAULT"
|
|
||||||
return super().custom_print_cell(actual_cell, cell_display_value)
|
|
||||||
Loading…
Reference in New Issue
Block a user