W trosce o banalne wykorzystania konsoli do celów wybrania kilku parametrów z listy dostępnych, autorzy biblioteki programistycznej
newt udowodnili, że wcale nie musimy pisać niesamowicie złożonego kodu. Okazuje się, że biblioteka
newt jest tym, czego potrzebuje czasmi każdy programista i ułątwia znacząco życie w pisaniu dedykowanych narzędzi z czytelnym interfejsem tekstowym zawierającym formularze.
Dla przykładu, gdy będziemy posiadali potrzebę napisania kilku formularzy dla konsoli - o skali trudności jak w poniższych przykładach - zachęcam do użycia biblioteki
newt w wersji dla języka
Python -
python-newt.
W prostocie siła - zapraszam do przeglądu możliwości na kilku poniższych fotkach.




Poniżej kod wjęzyku Python umożliwiający utworzenie prezentowaych na obrazkach formularzy:
#!/usr/bin/python
from snack import *
import sys
def help(screen, text):
raise ValueError, "foo"
ButtonChoiceWindow(screen, "Help", text, help = "Help on help")
t = TextboxReflowed(25, "Some text which needs to be wrapped at a good place.")
li = Listbox(5, width = 20, returnExit = 1)
li.append("First", "f")
li.append("Second", "s")
li.insert("Another", "a", "f")
li.delete("a")
ct = CheckboxTree(5, scroll = 1)
ct.append("Colors")
ct.addItem("Red", (0, snackArgs['append']), "red item key")
ct.addItem("Yellow", (0, snackArgs['append']))
ct.addItem("Blue", (0, snackArgs['append']))
ct.append("Flavors")
ct.addItem("Vanilla", (1, snackArgs['append']))
ct.addItem("Chocolate", (1, snackArgs['append']))
ct.addItem("Stawberry", (1, snackArgs['append']))
ct.append("Numbers")
ct.addItem("1", (2, snackArgs['append']))
ct.addItem("2", (2, snackArgs['append']))
ct.addItem("3", (2, snackArgs['append']))
ct.append("Names")
ct.addItem("Matt", (3, snackArgs['append']))
ct.addItem("Shawn", (3, snackArgs['append']))
ct.addItem("Wilson", (3, snackArgs['append']))
ct.append("Months")
ct.addItem("February", (4, snackArgs['append']))
ct.addItem("August", (4, snackArgs['append']))
ct.addItem("September", (4, snackArgs['append']))
ct.append("Events")
ct.addItem("Christmas", (5, snackArgs['append']))
ct.addItem("Labor Day", (5, snackArgs['append']))
ct.addItem("My Vacation", (5, snackArgs['append']))
b = Button("Button")
e = Entry(15, "Entry")
l = Label("label")
cb = Checkbox("checkbox")
r1 = SingleRadioButton("Radio 1", None, 1)
r2 = SingleRadioButton("Radio 2", r1)
def something():
print hello
screen = SnackScreen()
screen.helpCallback(help)
foo = EntryWindow(screen, 'Title', 'This is some text for the entry window',
['prompt', 'more', 'info'])
lbcw = ListboxChoiceWindow(screen, 'Title 2',
'Choose one item from the list below:',
('One', 'Two', 'Three', 'Four', 'Five'), default = 2,
help = "Help for a listbox")
sg = Grid(2, 3)
sg.setField(b, 0, 0, anchorLeft = 1)
sg.setField(e, 1, 0, (1, 0, 0, 0), anchorLeft = 1, anchorTop = 1)
sg.setField(l, 0, 1, (0, 1, 0, 0), anchorLeft = 1)
sg.setField(cb, 1, 1, (1, 1, 0, 0), anchorLeft = 1)
sg.setField(r1, 0, 2, (0, 0, 0, 0), anchorLeft = 1)
sg.setField(r2, 1, 2, (1, 0, 0, 0), anchorLeft = 1)
g = Grid(1, 3)
g.setField(t, 0, 0)
g.setField(li, 0, 1, (0, 1, 0, 1))
g.setField(sg, 0, 2)
g.place(1, 1)
screen.gridWrappedWindow(g, "title")
f = Form("This is some help")
f.add(li)
f.add(b)
f.add(e)
f.add(l)
f.add(cb)
f.add(r1)
f.add(r2)
f.add(t)
res = f.run()
screen.popWindow()
g = GridForm(screen, "Tree", 1, 2)
g.add(ct, 0, 0, (0, 0, 0, 1))
g.add(Button("Ok"), 0, 1)
g.runOnce()
screen.finish()
print "val", e.value()
print "check", cb.value()
print "r1", r1.selected()
print "listbox", li.current()
# returns a tuple of the wrapped text, the actual width, and the actual height
print res
print foo
print 'lbcw', lbcw
print "ct selected", ct.getSelection()
print "ct current", ct.getCurrent()
Ponadto dla wymagających istnieje też port formularzy do konsoli graficznej GTK -
gnewtDostępny jest też
tutorial do
newt.
