Npyscreen
Widget library and application framework built on top of ncurses
. Documentation]
Three main types of object compose npyscreen
applications:
- Application objects manage forms and other classes
- Form objects form the canvas upon which widgets are arrayed
- Form
general-purpose
- FormMutt
- Widget objects are individual controls
- TitleText
text entry
- TitleSelectOne
equivalent to radio buttons
- TitleDateCombo
allows picking of date on a small calendar
npyscreen.wrapper_basic
is the main entry point
import npyscreen
def myFunction(*args):
pass
if __name__ == '__main__':
npyscreen.wrapper_basic(myFunction)
print "Blink and you missed it!"
npyscreen.Form
is equivalent to the Tk()
object, which is typically instantiated as win
in GUI frameworks.
F = npyscreen.Form(name='My Test Application')
create()
The standard constructor calls this method, which does nothing by default and is meant to be overriden in subclasses. Widgets are defined here.
npyscreen.FormMutt
imitates a UI layout popularized by applications like mutt
, irssi
, and vim
, with a title bar at the top, a command line at the bottom, and a status line directly above the command line.
ACTION_CONTROLLER
can be defined in the FormMutt
subclass as the name of a subclass of ActionControllerSimple
.
Commands for the application can be defined as callbacks in the create()
method.
self.add_action(ident,call_back, True)
call_back(command_line, control_widget_proxy, live=True)
class ActionControllerSearch(npyscreen.ActionControllerSimple):
def create(self):
self.add_action('^/.*', self.set_search, True)
def set_search(self, command_line, widget_proxy, live):
self.parent.value.set_filter(command_line[1:])
self.parent.wMain.values = self.parent.value.get()
self.parent.wMain.display()
class FmSearchActive(npyscreen.FormMuttActiveTraditional):
ACTION_CONTROLLER = ActionControllerSearch
npyscreen.NPSAppManaged
is the preferred superclass to support object-oriented implementation.
class MyApplication(npyscreen.NPSAppManaged):
pass
run()
method of application object as main entry point.
run()
activates the default form, which should be given an id of MAIN
if __name__ == '__main__':
TestApp = MyApplication().run()
print "All objects, baby."
try
/except
block to allow for well-mannered exit in case of KeyboardInterrupt
(Ctrl+C)GitHub
try:
App().run()
except KeyboardInterrupt:
sys.exit(0)
Form
object with a NPSAppManaged
instance;
- addForm()
creates a new form and returns a weakref.proxy
to it
- addFormClass()
register a class of Form
rather than an instance
- registerForm()
It continually displays the Form named by its NEXT_ACTIVE_FORM
attribute.
Use the afterEditing
method to allow exiting.
class myEmployeeForm(npyscreen.Form):
def afterEditing(self):
self.parentApp.setNextForm(None)