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

如何让 urwid 为一个列提供比另一个更多的空间?

如何解决如何让 urwid 为一个列提供比另一个更多的空间?

我有一个像这样的 urwid 布局:

enter image description here

这个布局的代码是这样的:

import urwid


class DashboardUI:
    orders_txt: urwid.widget.Text

    def show_or_exit(self,key):
        if key in ('q','Q'):
            raise urwid.ExitMainLoop()
        self.orders_txt.set_text(repr(key))

    def show(self):
        algo_view = urwid.Text(u"Main Content Goes Here")
        algo_view_fill = urwid.Filler(algo_view,'top')
        algo_view_lineBox = urwid.LineBox(algo_view_fill,tlcorner=u'',tline=u'',lline=u'',trcorner=u'',blcorner=u'',rline=u'│',bline=u'',brcorner=u'│')

        self.orders_txt = urwid.Text(u"Orders\norder2\norder3")
        orders_fill = urwid.Filler(self.orders_txt,'bottom')
        orders_lineBox = urwid.LineBox(orders_fill,blcorner=u'─',rline=u'',bline=u'─',brcorner=u'─')

        counter_txt = urwid.Text(u"Counter 1\nCounter 2\nCounter 3")
        counters_fill = urwid.Filler(counter_txt,'top')
        counters_lineBox = urwid.LineBox(counters_fill,brcorner=u'─')

        resources_txt = urwid.Text(u"Resources 1\nResources 2\nResources 3")
        resources_fill = urwid.Filler(resources_txt,'top')
        resources_lineBox = urwid.LineBox(resources_fill,brcorner=u'')

        right_pile = urwid.Pile([orders_lineBox,counters_lineBox,resources_lineBox])

        layout = urwid.Columns([algo_view_lineBox,right_pile],dividechars=0)

        loop = urwid.MainLoop(layout,unhandled_input=self.show_or_exit)
        loop.run()

我希望左列占用 75% 的可用空间,右列占用 25%(理想情况下最多 100 个字符的宽度)。

我怎样才能使它具有这种改变的行为?

解决方法

找到了。

必须在添加列的同时指定它们的权重,如下所示:

layout = urwid.Columns([('weight',3,algo_view_linebox),right_pile])

右侧widget无需指定权重,默认为1。

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