Dear urwid users,
I am starting to take a look at urwid after a quite long brake again...
so I am still a newbie :-)
I am a bit confused about the handling of button-press reactions and
setting focus using keys for different widgets. I attached a small
example. The aim is to show a help text or some more buttons on the
right green 'box' in the inner-frame as soon as I walk through the
buttons. The focused is set to the buttons, but as soon as I press one
of the buttons I would like to focus to the current content of the right
green column.
It would be nice, if anyone has a hint, how to achieve this!?
Thanks!
Fabian
import os
import urwid.raw_display
import urwid
from urwid import *
import sys
class TextField(urwid.WidgetWrap):
def __init__(self, text):
self.widget = urwid.Text(text)
self.w = urwid.AttrWrap(self.widget,'bg','focus')
urwid.WidgetWrap.__init__(self, self.w)
self.selected = False
def keypress(self, size, key):
return key
def selectable(self):
return True
def button_press(self, button):
raise DialogExit(button.exitcode)
def post_press(self, button):
raise DialogExit(button.exitcode)
def pre_press(self, button):
raise DialogExit(button.exitcode)
def solve_press(self, button):
raise DialogExit(button.exitcode)
def overview_press(button):
inner_head= AttrWrap(Text("NEU"),'bg3')
print "HALLO"
# raise DialogExit(button.exitcode)
def caseBuild_press(self, button):
raise DialogExit(button.exitcode)
def run():
some_text_list = urwid.SimpleListWalker(map(TextField, (("this is some content of list"*10).split())))
listbox = urwid.ListBox(some_text_list)
emptylist=[]
emptylistbox = urwid.ListBox(emptylist)
inner_foot = urwid.Text("inner_foot")
postButton=urwid.AttrWrap(Button("Post",post_press,None),"bg","focus")
caseBuilderButton=urwid.AttrWrap(Button("Case Builder",caseBuild_press,None),"bg","focus")
preButton=urwid.AttrWrap(Button("Pre",pre_press,None),"bg","focus")
solverButton=urwid.AttrWrap(Button("Solver",solve_press,None),"bg","focus")
overviewButton=urwid.AttrWrap(Button("OverView",on_press=overview_press,user_data=None),"bg","focus")
divider=urwid.Divider(div_char=' ', top=0, bottom=0)
topButtons=urwid.Pile([overviewButton,divider,solverButton,divider,preButton,divider, caseBuilderButton,divider,postButton])
topButtons= AttrWrap(topButtons,'bg2')
foot_column=Text("foot")
inner_head= AttrWrap(Text("innerText"),'bg3')
inner_head = AttrWrap(LineBox(inner_head),'line')
height = 30
columnsC = Columns([("weight",1,listbox),("fixed",10,listbox),emptylistbox], 1)
fillerR= AttrWrap(LineBox(columnsC),'bg3')
widget1 = urwid.Pile([divider,('weight',10,topButtons),divider]) #('weight',10,topButtons2)])
filler= AttrWrap(urwid.Filler(widget1,'top'),'bg3')
filler= AttrWrap(LineBox(filler),'line')
columns = Columns([('fixed',20,filler),fillerR], 1)
user_input = urwid.Edit("Type things here ->","")
status_bar = urwid.Text("Everything is just great")
footer = urwid.Pile( [user_input, status_bar], focus_item=0 )
inner_frame = urwid.Frame(body=columns, footer=footer, header=inner_head)
outer_foot = urwid.Text("outer_foot")
outer_head = urwid.Text("outer_head")
outer_frame = urwid.Frame(body=inner_frame, footer=outer_foot,
header=outer_head)
size = ui.get_cols_rows()
canvas = outer_frame.render(size, focus=1)
ui.draw_screen(size, canvas)
while True:
size = ui.get_cols_rows()
key = ui.get_input()
for k in key:
if k == 'meta a':
print "H"
if k == 'j' or k=='down':
outer_frame.keypress(size, 'down')
#inner_foot.set_text(listbox.get_focus()[0].widget.text)
elif k == 'k' or k=='up':
outer_frame.keypress(size, 'up')
#inner_foot.set_text(listbox.get_focus()[0].widget.text)
if key == "p":
user_input.set_focus(1, coming_from='above' )
canvas = outer_frame.render(size, focus=1)
ui.draw_screen(size, canvas)
palette = [
('body', 'black', 'light gray'),
('bg', 'black', 'dark green', 'standout'),
('bg3', 'dark green', 'black'),
('line', 'dark blue', 'black'),
('focustext','light gray','dark blue'),
('bg2', 'black', 'dark green'),
('focus', 'dark blue', 'light gray', 'bold')]
ui = urwid.raw_display.Screen()
ui.register_palette(palette)
ui.run_wrapper(run)
_______________________________________________
Urwid mailing list
[email protected]
http://lists.excess.org/mailman/listinfo/urwid