添加新的小部件时如何在最后设置编辑光标?

时间:2019-06-29 17:28:55

标签: python urwid

当新的Edit.edit_text小部件添加到Edit时,我试图将光标设置在ListBox的末尾。我尝试使用set_cursor_end()末尾的函数new_line()将其设置到最后一个位置,但这似乎不起作用。

import urwid
from selectable_edit import SelectableEdit


class NewLine(urwid.ListBox):
    def __init__(self):
        body = urwid.SimpleFocusListWalker([])
        super(NewLine, self).__init__(body)

        self.current_widget = None
        self.pos = -1

        self.new_line()

    def add( self, widget) :
        self.pos += 1
        self.body.insert( self.pos, widget )
        self.set_focus( self.pos )

    def new_line( self ) :
        widget = urwid.Edit(('I say', u"What is your name?: "), "Test")
        self.current_widget = widget
        self.add( widget )
        self.set_cursor_end()

    def set_cursor_end( self ):
        text = self.current_widget.edit_text
        self.current_widget.edit_pos = len( text )

    def set_cursor_begin( self ):
        self.current_widget.edit_pos = 0

    def keypress(self, size, key):
        key = super(NewLine, self).keypress(size, key)
        if key == 'tab' or key == 'ctrl right':
            self.set_cursor_end()
        elif key == 'ctrl left':
            self.set_cursor_begin()
        elif key != 'enter':
            return key
        else :
            self.new_line()


palette = [('I say', 'default,bold', 'default'),]
urwid.MainLoop(NewLine(), palette).run()

在此示例中,当按下 Enter 时,最后一个小部件被聚焦,但是光标位置始终与之前相同,而不是行尾。

此外,当按下 Tab 时,set_cursor_end()也起作用。

0 个答案:

没有答案