Как получить дочерний вид сфокусированного виджета для отображения фокуса / стиля активной палитры - PullRequest
0 голосов
/ 28 января 2019

У меня есть пользовательский виджет кнопки для отображения таблицы с макетом столбца.Выбор строки 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)

Это не полный код, но должно быть достаточно для понимания проблемы.

...