Hello all,
Wondering if someone can help me improve this UI i'm
building with urwid:
<code>
#!/usr/bin/env python
from select import select
from traceback import format_exc
import urwid
from urwid.raw_display import Screen
MAIN_TITLE = "-test: 0.0.1"
KEYS = "q:Quit s:Scan i:Info m:Monitor ?:Help"
def setNetwork(net):
pass
class MainWindow(Screen):
def __init__(self):
Screen.__init__(self)
self.register_palette((
("title", "dark red", "default"),
("keys", "dark red", "default"),
("message", "light cyan", "default"),
("input", "light gray", "default"),
))
self.mode = ""
self.pos = 0
self.input = ""
self.nets = []
self.items = []
self.listbox = urwid.ListBox(self.items)
self.title = urwid.Text(MAIN_TITLE)
self.header = urwid.AttrWrap(self.title, "title")
self.keys = urwid.AttrWrap(urwid.Text(KEYS), "keys")
self.user = urwid.AttrWrap(urwid.Text("", ), "message")
self.footer = urwid.Pile([self.keys, self.user])
self.top = urwid.Frame(self.listbox, self.header,
self.footer)
def displayInfo(self):
while len(self.items) > 0:
self.items.pop()
self.items.append(urwid.Text("Some data"))
self.items.append(urwid.Text("Some more data"))
def doScan(self):
while len(self.items) > 0:
self.items.pop()
self.items.append(urwid.Text("Some data"))
self.items.append(urwid.Text("Some more data"))
self.user.set_text("Connect to: ")
def process(self):
size = self.get_cols_rows()
if self.mode == "monitor":
self.displayInfo()
if not select(
self.get_input_descriptors(),
[], [], 0.1)[0] == []:
timeout, keys, raw = self.get_input_nonblocking()
for k in keys:
if k == "window resize":
size = self.get_cols_rows()
continue
elif k in "0123456789":
self.input += k
elif k == "enter":
self.mode = ""
self.user.set_text("")
try:
i = int(self.input)
if i >= 0 and i <
len(self.nets):
setNetwork(self.nets[i])
else:
self.user.set_text("ERROR: Invalid selection")
except ValueError:
self.user.set_text("ERROR:
Invalid input")
elif k == "s":
self.mode = "select"
self.doScan()
elif k == "i":
self.mode = ""
self.displayInfo()
elif k == "m":
self.mode = "monitor"
elif k == "q":
raise SystemExit, 0
else:
self.user.set_text("Key: %s" % k)
self.top.keypress(size, k)
self.update_screen(size)
def update_screen(self, size):
canvas = self.top.render(size, focus=True)
self.draw_screen(size, canvas)
def main():
window = MainWindow()
window.start()
while True:
try:
window.process()
except KeyboardInterrupt:
window.stop()
break
except SystemExit:
window.stop()
break
except Exception, e:
window.stop()
print format_exc()
break
if __name__ == "__main__":
main()
</code>
Basically when you press "s" a scan will result (just dummy
code for now) and you should be able to highlight the
desired item with up/down and select it by pressing enter.
The only way I can think of doing this is with a lot of
messy ugly code - I'm sure there is a more elegant solution.
Much appreicated,
cheers
James
--
--
-"Problems are Solved by Method"
-
- James Mills <[EMAIL PROTECTED]>
- HomePage: http://shortcircuit.net.au/~prologic/
- IRC: irc://shortcircuit.net.au#se
Please avoid sending me Word or PowerPoint attachments.
See http://www.gnu.org/philosophy/no-word-attachments.html
_______________________________________________
Urwid mailing list
[email protected]
http://lists.excess.org/mailman/listinfo/urwid