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
|
||||
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from bookstore.inventory import Inventory
|
||||
from ui.app import App
|
||||
|
||||
|
||||
def main() -> None:
|
||||
app = App()
|
||||
db_path = Path("db.sqlite3")
|
||||
inventory = Inventory(db_path)
|
||||
app = App(inventory)
|
||||
app.run()
|
||||
|
||||
|
||||
|
||||
@ -1,9 +1,34 @@
|
||||
import npyscreen as nps
|
||||
|
||||
from .forms import AddBookForm, BookForm
|
||||
import customtkinter as ctk
|
||||
from bookstore.book import Book
|
||||
from bookstore.inventory import Inventory
|
||||
|
||||
|
||||
class App(nps.NPSAppManaged):
|
||||
def onStart(self):
|
||||
self.addForm("MAIN", BookForm, name="Bookstore")
|
||||
self.addForm("ADD_BOOK", AddBookForm, name="Add Book")
|
||||
class App(ctk.CTk):
|
||||
def __init__(self, inventory: Inventory, *args, **kwargs) -> None:
|
||||
super(App, self).__init__(*args, **kwargs)
|
||||
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