2008-09-01から1ヶ月間の記事一覧

《付録》GroupControl.xaml

《付録》GroupControl.py

# -*- coding: utf-8 -*- #=============================================================================== # Copyright (C) 2000-2008, 小泉ひよ子とタマゴ倶楽部 # # History: WPF examples # 2008/01/25, IronPython 1.1.1 (download) # 2008/08/22, …

事例:TabControl

一次予選リーグに出場した全32チームが一堂に会するのは圧巻ですが、各チームごとに1つのタブ項目を占有するのは、問題がです。そこで、予選グループ(A〜H)ごとに、四チームの旗を表示できるように改良します。 >ipy.exe GroupControl.py (上)タブ…

ジェネレーターの生成

class ExWindow(Window): def init(self): ... for group, teams in Team(): item = TabItem( Header=group, ) self.tabControl.Items.Add(item) panel = WrapPanel() item.Content = panel for e in teams: brush = ImageBrush( ImageSource=BitmapImage(Ur…

まとめ

複数の項目を分類して整理するのに、TabControl を導入した事例を紹介しました。Iterator パターンを適用するときに、辞書を利用して階層構造を形成します。 《Previous|2/2|Next》

ジェネレーターの実現

ジェネレーター Team を再定義して、for 文とともに利用できるようにします。 class Team: def __iter__(self): m = self.teams() for e in "ABCDEFGH": yield e, m[e] 各グループ e と、それに属するチーム m[e] から成る、タプルを与えます。 def teams(se…

第1章 TabControl 2/2

《Previous|2/2|Next》C#.use(better, IronPython=”WPF”) 《記事一覧》

《付録》TeamControl.xaml

ジェネレーターの生成

class ExWindow(Window): def init(self): target = "tabControl", self._Controls(target) for e in Team(): item = TabItem( Header=e, ) self.tabControl.Items.Add(item) brush = ImageBrush( ImageSource=BitmapImage(Uri("image/%s.gif"%e, UriKind.Re…

《付録》TeamControl.py

# -*- coding: utf-8 -*- #=============================================================================== # Copyright (C) 2000-2008, 小泉ひよ子とタマゴ倶楽部 # # History: WPF examples # 2008/01/25, IronPython 1.1.1 (download) # 2008/08/22, …

事例:TabControl

コントロール TabControl は、ListBox と同様に、限られた領域に複数の項目を表示したいときに便利です。 ItemsControl ContentControl プロパティー .Items .Content リスト ListBox ListBoxItem タブ TabControl TabItem TabControl は、複数の TabItem で…

ジェネレーターの実現

ジェネレーター Team を定義して、for 文とともに利用できるようにします。 class Team: def __iter__(self): for e in self.teams(): yield e 各チームの名前(略号)を表わす文字列を与えます。 def teams(self): return [ "GER", "ECU", "POL", "CRC", # …

第1章 TabControl 1/2

《Previous|1/2|Next》C#.use(better, IronPython=”WPF”) 《記事一覧》 TabControl 《著》本間りす《監修》小泉ひよ子とタマゴ倶楽部

インターフェース:IEnumerator

if に続く条件式 dict != null が成立しないなら、引数 b によって参照されるものは、汎用のインターフェース IEnumerator で規定したプロトコルに従ってアクセスします。そこで、メソッド本体を見ると、次に示す典型的な C# のイディオムが記述してあります…

補助関数:NullToObj

関数 NullToObj は、いくつかの関数の実現を補助するもので、必要なら、None に相当するオブジェクトをリターン値とします。 internal static class DictOps { public static object NullToObj(object o) { if (o == null) return nullObject; return o; }if…

インターフェース:IDictionaryEnumerator

if に続く条件式 dict != null が成立するなら、変数 dict によって参照される引数は、インターフェース IEnumerator で規定したプロトコルに従います。そこで、メソッド本体を見ると、次に示す典型的な C# のイディオムが記述してあります。 IDictionaryEnu…

補助関数:AddKeyValue

関数 AddKeyValue は、関数 Update の実現を補助するもので、辞書 self に要素対 o を登録します。 internal static class DictOps { public static bool AddKeyValue(IDictionary self, object o) { IEnumerator i = Ops.GetEnumerator(o); if (i.MoveNext(…

ソースコードの歩き方《IronPython》dict.update 3/3

Python.use(better, src=”IronPython”) # ソースコードを散策する《記事一覧》 《承前》

ソースコード:Dict.Update(...)

(メソッド dict.update に相当する)メソッド Update の定義を含む、ソースコードの断片を次に示します。# IronPython-1.1.2/Src/IronPython/Runtime/Dict.cs [PythonType("dict")] public class Dict : ... IDictionary ... { ... #region Python dict imp…

ソースコード:DictOps.Update(IDictionary<>, object)

内部クラス DictOps では、クラス Dict で規定するメソッドに対する、実質的な処理群(Ops)を実現します。これらのメソッドを static 宣言することで「関数」として再定義します。また、メソッド呼び出しの対象となるインスタンス(実引数 this)が、ここで…

ソースコードの歩き方《IronPython》dict.update 2/3

Python.use(better, src=”IronPython”) # ソースコードを散策する《記事一覧》 《承前》

読者への課題:update

さらにその理解を深めるために、読者のみなさんへの課題を提供します。 《課題》変数 ex を使わずに、dict 型のリテラル表現を使うと、次のように、 >>> {"A":1,"B":2,"C":3}.update(A=-1) エラーにはなりませんが、これにはどのような意味があるのでしょう…

事例:dict.update を使って

>>> ex {'A': 1, 'C': 3, 'B': 2} >>> ex.update({"A":-1,"D":4}) >>> ex {'A': -1, 'C': 3, 'B': 2, 'D': 4}引数に指定した辞書 {"A":-1,"D":4} を使って、もとの辞書に上書きします。同じキー要素 'A' が存在するなら、その値要素 -1 を上書きします。同じ…

メソッド dict.update

メソッド update のヘルプ情報を確認します。>>> help(dict.update) Help on method_descriptor:update(...) D.update(E, **F) -> None. Update D from E and F: for k in E: D[k] = E[k] (if E has keys else: for (k, v) in E: D[k] = v) then: for k in F…

関連記事

map 演算 ++ Override→VDM++《17》Map に対する演算(2)

ソースコードの歩き方《IronPython》dict.update 1/3

Python.use(better, src=”IronPython”) # ソースコードを散策する《記事一覧》 メソッド dict.update:IronPython 篇 《著》本間りす《監修》小泉ひよ子とタマゴ倶楽部

インスタンスメソッド:setListData

要素対を含まないときに

要素対を含まないときには、括弧 {} で括るだけです。 buf.Append("{"); ... foreach (KeyValuePair kv in self) { ... } buf.Append("}");対象となる IDictionary self が、要素対を含まないときには、foreach ループの本体を実行しません。そのため、作業…

イディオム:foreach 文

メソッドの本体には、次に示す C# のイディオムが記述してあります。 foreach (KeyValuePair kv in self) { ... kv.Key ... ... kv.Value ... }foreach ループでは、IDictionary self を構成する各要素 KeyValuePair kv を順に参照します。そして、プロパテ…

キーと値を区切るときに

要素対は、キーと値をコロン「:」で区切ります。 foreach (KeyValuePair kv in self) { ... buf.Append(": "); buf.Append(Ops.StringRepr(kv.Value)); }作業領域 buf の末尾には、キー要素に続けて、コロン「:」を追加します。そして、値要素として、任意の…