-1

私は Urwid ライブラリ (Python で構築されたもの) を使用する初心者であり、urwid の例でいくつかの既存の urwid の例を理解しようとしています。それらの1つはこのコードです:

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 が配置されている画面位置に配置するということですか? 「ウィジェット A を別のウィジェット B でラップする」というフレーズは、「ウィジェット A をウィジェット B にマップする」と言うのと同じ意味ですか?
  4. map1 は Filler 装飾ウィジェットの original_widget ですか?
  5. streak の垂直方向の高さと txt の垂直方向の高さが正確に一致するコード部分はどれですか? streak の垂直方向の高さが txt の垂直方向の高さよりも大きくなったり小さくなったりしないのはなぜですか? map2 がない場合、txt1 を除く画面の残りの部分は赤になるか、黒だけになるのでしょうか?
4

1 に答える 1

1

属性は、オブジェクト指向プログラミング(OOP)のプログラミング スタイル (パラダイム) の一部です。オブジェクト指向プログラムは、クラスとそれらのクラスのインスタンスから構築されます。クラスは設計図のようなもので、インスタンスはその設計図から作られたもののようなものです。

たとえば、Person というクラスがあり、次のようにコーディングするとします。

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

変数 eye_colour と hair_colour は、アリスとボブの属性になります。次に、これを行うことができます:

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

これは次のように出力されます: blue pink

urwid の場合、Text オブジェクトのインスタンスのようなものに属性があり、その場合は、表示するテキストとその配置方法などです。たとえばtxt = urwid.Text(('banner', u" Hello World "), align='center')、Text クラスのインスタンスが作成されtxt、display 属性と値「center」を持つ('banner', u" Hello World")別の属性 ( ) を持つ変数に割り当てられます。alignこれは、プログラムがオブジェクトを表示するときに、Unicode 文字列 " Hello World " をバナーのスタイルで中央に配置して表示することを意味します。

あなたの質問のいくつかに答えて:

map1 ラッピング txt は、map1 が属性として txt を持っていることを意味するため、プログラムは、map1 の他の属性 (この場合は「streak」) に基づいたスタイルで txt を表示します。高さに一致するコードはモジュール urwid のどこかにあり、行によってプログラムに追加されますimport urwid。map2 がなかった場合は、ここにあるように、背景色がデフォルトの端末の色になると思います。

于 2013-07-29T12:49:02.017 に答える