微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

urwid使文本“自动滚动”

如何解决urwid使文本“自动滚动”

我目前正在尝试为树莓派上的can bus测试构建一些ui。 它基本上很容易构建,因为它只有一个主信息屏幕和一个输入文本。 我的问题是我找不到如何使输入文本自动滚动到最后发送的文本。

这就是我的小用户界面的创建方式。

        # create ui
        self.edit= urwid.Edit(caption="Input: ",edit_text='')
        header = urwid.AttrWrap(urwid.Text('Barobo CAN Control Center (type \'help\' for help,F8 or \'quit\' for exit)'),'header')
        footer = urwid.AttrWrap(urwid.AttrWrap(self.edit,'editbx'),'footer')

        self.txt= urwid.Text("")
        listBox_content = [self.txt,valign='bottom']
        listBox = urwid.ListBox(urwid.SimpleListWalker(listBox_content))
        self.frame = urwid.Frame(urwid.AttrWrap(listBox,'body'),header=header,footer=footer,focus_part='footer')

所以我现在需要的是使self.txt作为在那里绘制的最后一个文本的东西。甚至可以使它使用向上翻页和向下翻页键滚动。.

有什么提示吗? 编辑:我了解到我必须将文本作为小部件附加到listwalker。在我将文本添加到列表框中唯一的文本小部件之前

    def log(self,message,level='info'):
        '''
        append a message to the message window
        '''
        if self.__loglevel >= Logdisplay.level.index(level):
            txt = urwid.Text(message)
            self.__walker.append(txt)

但是它仍然没有显示最后的项目。

解决方法

认为我找到了解决方法 urwid.ListBox具有set_focus函数,我要做的就是将它放在行者列表中的最后一个位置

            self.listbox.set_focus(self.__walker.positions(True)[0])

可悲的是,滚动浏览它们仍然不起作用。

,

您可以使用Tkinter还是简单的

self.see("end")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。