我是使用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()
答案 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那么背景颜色将是你的默认终端颜色。