У меня есть пользовательский виджет кнопки для отображения таблицы с макетом столбца.Выбор строки BoxButton
активирует стиль reversed
, но стиль reversed2
вложенного виджета Text
не активируется.Как мне этого добиться?
palette = [
('reversed', 'standout', '', '', 'white', '#6af'),
('reversed2', 'standout', '', '', 'g66', '#6af'),
]
class BoxButton(urwid.WidgetWrap):
_border_char = u'─'
signals = ["click"]
def __init__(self, widget, on_press=None, user_data=None):
padding_size = 2
self.widget = widget
if on_press:
urwid.connect_signal(self, 'click', on_press, user_data)
super(BoxButton, self).__init__(self.widget)
def selectable(self):
return True
def keypress(self, size, key):
if self._command_map[key] != urwid.ACTIVATE:
return key
self._emit('click')
def mouse_event(self, size, event, button, x, y, focus):
if button != 1 or not is_mouse_press(event):
return False
self._emit('click')
return True
def menu(choices):
body = []
for c in choices:
button = BoxButton(urwid.Columns([
('weight', 1, urwid.Text(c['name'])),
# This is the nested widget that should change to activated too
('weight', 1, urwid.AttrMap(urwid.Text(c['command']), 'commandCol', 'reversed2')),
('weight', 4, urwid.Text(c['description']))
]))
urwid.connect_signal(button, 'click', item_chosen, c)
body.append(urwid.AttrMap(button, None, focus_map='reversed'))
return urwid.ListBox(urwid.SimpleFocusListWalker(body))
main = menu(choices)
loop = urwid.MainLoop(main, palette, unhandled_input=unhandled_input)
Это не полный код, но должно быть достаточно для понимания проблемы.