urwid示例中属性的含义

时间:2013-07-29 12:28:29

标签: python python-2.7 console-application tui urwid

我是使用Urwid库(内置Python)的新手,我试图了解urwid examples处现有的一些urwid示例。其中一个就是这段代码:

import urwid

palette = [
('banner', 'black', 'light gray', 'standout,underline'),
('streak', 'black', 'dark red', 'standout'),
('bg', 'black', 'dark blue'),]

txt = urwid.Text(('banner', u" Hello World "), align='center')
map1 = urwid.AttrMap(txt, 'streak')
fill = urwid.Filler(map1)
map2 = urwid.AttrMap(fill, 'bg')

def exit_on_q(input):
    if input in ('q', 'Q'):
    raise urwid.ExitMainLoop()

loop = urwid.MainLoop(map2, palette, unhandled_input=exit_on_q)
loop.run()
  1. 此示例中的属性如何工作?
  2. 前景和背景是什么意思?
  3. map1“包裹”txt是什么意思?这是否意味着您创建一个名为map1的窗口小部件并将窗口小部件放置在放置txt的屏幕位置上?短语“用另一个小部件B包装小部件A”是否与我们说“将小部件A映射到小部件B”时的含义相同?
  4. map1是Filler装饰小部件的original_widget吗?
  5. 什么代码部分匹配条纹的垂直高度与txt的垂直高度完全匹配?为什么条纹的垂直高度不会大于或小于txt的垂直高度?如果没有map2那么它是否意味着屏幕的其余部分除了txt1会是红色还是只是黑色?

1 个答案:

答案 0 :(得分:1)

属性是object oriented programming(OOP)的编程风格或范例的一部分。 面向对象的程序是从类和这些类的实例构建的。 类似于蓝图,实例就像是从这些蓝图中制作的东西。

例如,您可能有一个名为Person的类,然后是这样的代码:

alice = Person(eye_colour="blue",hair_colour="ginger")
bob = Person(eye_colour="brown",hair_colour="black")

变量eye_colour和hair_colour将成为alice和bob的属性。 然后你可以这样做:

print(alice.eye_colour)
bob.hair_colour = "pink"
print(bob.hair_colour)

这将输出以下内容:    蓝色    粉红色

在urwid的情况下,像Text对象的实例之类的东西具有属性,在这种情况下,诸如要显示的文本和如何对齐它们之类的东西。例如,此处 - txt = urwid.Text(('banner', u" Hello World "), align='center') - 创建了一个Text类的实例,并将其分配给变量txt,其中包含显示属性('banner', u" Hello World"),另一个属性(align)具有该值'中央'。这意味着程序在显示对象时,将以横幅样式显示unicode字符串“Hello World”,与中心对齐。

回答你的一些问题:

map1包装txt意味着map1将txt作为属性,因此程序以基于map1的其他属性的样式显示txt,在本例中为“streak”。与高度匹配的代码位于模块urwid中的某个位置,该位线由import urwid行添加到您的程序中。如果没有map2,那么我认为,正如它所说here那么背景颜色将是你的默认终端颜色。