#!/usr/bin/env python3 import curses from curses import panel class Menu(object): def __init__(self, items, stdscreen): self.window = stdscreen self.window.keypad(1) self.panel = panel.new_panel(self.window) self.panel.hide() panel.update_panels() self.position = 0 self.items = items self.items.append(("exit", "exit")) def navigate(self, n): self.position += n if self.position < 0: self.position = 0 elif self.position >= len(self.items): self.position = len(self.items) - 1 def display(self): self.panel.top() self.panel.show() self.window.clear() self.window.box() while True: self.window.refresh() curses.doupdate() for index, item in enumerate(self.items): if index == self.position: mode = curses.A_REVERSE else: mode = curses.A_NORMAL msg = "%s" % (item[0]) self.window.addstr(1 + index, 1, msg, mode) key = self.window.getch() if key in [curses.KEY_ENTER, ord("\n")]: if self.position == len(self.items) - 1: break else: self.items[self.position][1]() elif key == curses.KEY_UP: self.navigate(-1) elif key == curses.KEY_DOWN: self.navigate(1) self.window.clear() self.panel.hide() panel.update_panels() curses.doupdate() def resist(menu): resistors_items = [("10R", curses.beep), ("10K", curses.beep), ("330R", curses.flash), ("57K", curses.flash)] resistorsMenu = Menu(resistors_items, menu) resistorsMenu.display() class MyApp(object): def __init__(self, screen): screen = curses.initscr() curses.curs_set(0) curses.start_color() curses.init_color(0,0,0,0) screen.box() cols22 = (curses.COLS - 2) * 0.22 # Take 2 characters out from the boarders and then calculate 22% cols22 = int(cols22) # Ditch the fractional part cols56 = (curses.COLS - 2) * 0.56 # Take 2 characters out from the boarders and then calculate 56% cols56 = int(cols56) + 1 # Ditch the fractional part and add 1 lines = (curses.LINES - 2) * 0.95 # Take 2 characters out from the boarders and then calculate 95% lines = int(lines) # Ditch the fractional part # title = "Sparks-Skraps" + " COLS -> " + str(curses.COLS) + " lines -> " + str(cols56) title = "Sparks-Skraps" titlePos = (curses.COLS / 2) - (len(title) / 2) screen.addstr(1, int(titlePos), title, curses.A_BOLD) screen.refresh() components = curses.newwin(lines,cols22,3,1) components.box() components.addstr(1, 1, "precious components") components.refresh() parts = curses.newwin(lines, cols22, 3, 1+cols22) parts.box() parts.addstr(1, 1, "My precious parts") parts.refresh() info = curses.newwin(lines, cols56, 3, 1+cols22*2) info.box() info.addstr(1, 1, "My precious info") info.refresh() # resistors_items = [("10R", curses.beep), ("10K", curses.beep), ("330R", curses.flash), ("57K", curses.flash)] # resistorsMenu = Menu(resistors_items, parts) # resistorsMenu.display() components_items = [("Resistors", curses.beep), ("Capacitors", curses.beep), ("Coils", curses.flash), ("IC\'s", curses.flash)] componentsMenu = Menu(components_items, components) componentsMenu.display() if __name__ == "__main__": curses.wrapper(MyApp) ''' components = curses.newwin(lines,cols22,3,1) # components.box() # components.addstr(1, 1, "precious components") components.refresh() parts = curses.newwin(lines, cols22, 3, 1+cols22) parts.box() parts.addstr(1, 1, "My precious parts") parts.refresh() info = curses.newwin(lines, cols56, 3, 1+cols22*2) info.box() info.addstr(1, 1, "My precious info") info.refresh() '''