【问题标题】:meaning of attributes in urwid examples [closed]urwid 示例中属性的含义
【发布时间】:2013-07-29 12:28:29
【问题描述】:

我是使用 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 "wraps" txt 是什么意思?这是否意味着您创建了一个名为 map1 的小部件并将该小部件放置在放置 txt 的屏幕位置上?短语“用另一个小部件 B 包装一个小部件 A”是否与我们所说的“将小部件 A 映射到小部件 B”的意思相同?
  4. map1 是 Filler 装饰小部件的 original_widget 吗?
  5. 哪些代码部分匹配 streak 的垂直高度与 txt 的垂直高度完全匹配?为什么 streak 的垂直高度没有变得大于或小于 txt 的垂直高度?如果没有 map2,那是否意味着除了 txt1 之外的屏幕其余部分都是红色的还是只有黑色的?

【问题讨论】:

  • 那些标记为不清楚的人是否曾经使用过 Urwid 库?
  • 几年后刚来到这里,带着确切的问题。非常感谢,伙计们!真的做得很好

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


【解决方案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 类的实例并将其分配给具有显示属性 ('banner', u" Hello World") 的变量 txt 和具有值“中心”的另一个属性 (align)。这意味着程序将在显示对象时,以横幅样式显示 unicode 字符串“Hello World”,并与中心对齐。

回答您的一些问题:

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

【讨论】:

  • 完美答案!谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
相关资源
最近更新 更多