BasicBridge_Forms.py

  • Windows Forms アプリケーションとして、IronPython で実現した事例を紹介します。

# -*- coding: utf-8 -*-
#===============================================================================
# Copyright (C) 2000-2008, 小泉ひよ子とタマゴ倶楽部
#
# History: Design Pattern
# 2008/01/25, IronPython 1.1.1 (download)
# 2008/08/22, IronPython 1.1.2 (download)
# 2008/01/15, ver.1.0, Windows Forms
# 2008/09/28, ver.2.1, IronPython 1.1.2
#===============================================================================
import clr
clr.AddReference("System")
from System import *
clr.AddReference("System.Data")
from System.Data import *
clr.AddReference("System.Drawing")
from System.Drawing import *
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import *

GridAdapter.cs

class GridAdapter:
def __init__(self, grd):
self.grid = grd
self.dTable = self.grid.DataSource
self.grid.MouseDown += self.Grid_Click
self.row = -1

def Grid_Click(self, sender, e):
print "... Grid_Click(%s, %s)"%(sender,e)
hti = self.grid.HitTest(e.X, e.Y)
if hti.Type == DataGrid.HitTestType.Cell:
self.row = hti.Row

def Add(self, p):
row = self.dTable.NewRow()
row[0] = p.name
row[1] = p.quantity
self.dTable.Rows.Add(row)
self.dTable.AcceptChanges()

Form1.cs


class BasicBridge_WPF(Form):
def __init__(self, **args):
self.InitializeComponent()
self.init()

def init(self):
self.products = [] # ArrayList
self.readFile(self.products)
for e in ProductList(self.lsProd), GridList(self.grdProd):
ListBridge(e).addData(self.products)

  • ArrayList に代えて、[] を利用しています。


def readFile(self, products):
fl = csFile("products.txt")
for s in fl.file().readlines():
products.append(Product(s))
else:
fl.close()

  • file.readlines を利用しています。
  • list.append を利用しています。



def InitializeComponent(self):
self.grdProd = self._grdProd()
self.lsProd = self._lsProd()
self._Controls()

def _grdProd(self):
return DataGrid(
CaptionVisible = False,
Location = Point(184, 16),
Name = "grdProd",
RowHeadersVisible = False,
Size = Size(160, 176),
)

def _lsProd(self):
return ListBox(
Location = Point(16, 16),
Name = "lsProd",
Size = Size(128, 173),
)



def _Controls(self):
for e in self.grdProd, self.lsProd:
self.Controls.Add(e)
self.ClientSize = Size(352, 229)