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 - gnewt
Dostępny jest też tutorial do newt.
2 komentarze:
Dzięki za informację, właśnie czegoś takiego szukałem (akurat w C a nie w Pythonie). Na pewno wypróbuję :).
Proszę bardzo :-)
Czy chcesz wykorzystać newt do softu na systemy wbudowane lub smartfony ? Skoro ncurses jest dla Ciebie zbyt ciężki;-)
Prześlij komentarz