当新的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()
也起作用。