表を作る(wxListCtrl, wxGrid)

複数の数値をきれいに入力するために、まず入力用の表を作る(行数は1行で固定する)。この表はwxGridで作成する。続いて、ボタンを押すことで、入力用の表に入力した数値を別の表へ順番に記入していく(行数はだんだん増えてゆく)。この出力用の表はwxListCtrlで作成する。
コードの主な部分のみ、以下に示す。

(1)入力用の表を作成

import wx.grid as gridlib

class SelectSamplePoint(gridlib.Grid):
    def __init__(self, parent):
        gridlib.Grid.__init__(self, parent, -1)

        FltEdX = gridlib.GridCellFloatEditor(1,5)
        FltEdY = gridlib.GridCellFloatEditor(1,5)
        FltEdZ = gridlib.GridCellFloatEditor(1,5)
        ChoEd = gridlib.GridCellChoiceEditor(choices=['U', 'V',
                                                      'W', 'P'])    
        self.CreateGrid(1,4)
        self.SetColLabelValue(0, "X")
        self.SetColLabelValue(1, "Y")
        self.SetColLabelValue(2, "Z")
        self.SetColLabelValue(3, "V")
        self.SetRowLabelValue(0, "Enter values ")

        self.SetCellEditor(0,0,FltEdX)
        self.SetCellEditor(0,1,FltEdY)
        self.SetCellEditor(0,2,FltEdZ)
        self.SetCellEditor(0,3,ChoEd)

(2)出力用の表を作成

        self.Sampling = SelectSamplePoint(p)
        Btn0 = wx.Button(p, wx.ID_ADD)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.Sampling, 0, wx.ALIGN_RIGHT|wx.ALL, 5)
        sizer.Add(Btn0, 0, wx.ALIGN_RIGHT|wx.ALL, 8)        

        # Summary of Sampling points
        self.LISTctl = wx.ListCtrl(p, -1, size=(400,150),
                                   style=wx.LC_REPORT|wx.LC_HRULES)
        self.LISTctl.InsertColumn(0, "#")
        self.LISTctl.InsertColumn(1, "X")
        self.LISTctl.InsertColumn(2, "Y")
        self.LISTctl.InsertColumn(3, "Z")
        self.LISTctl.InsertColumn(4, "V")

(3)入力用の表に入力された値を出力用の表に書き出す(ADDボタンを押したときのイベントを定義)

import Util

    def AddPoint(self, event):
        Util.SmplNumber += 1
        Util.SmplX.append(self.Sampling.GetCellValue(0,0))
        Util.SmplY.append(self.Sampling.GetCellValue(0,1))
        Util.SmplZ.append(self.Sampling.GetCellValue(0,2))
        Util.SmplV.append(self.Sampling.GetCellValue(0,3))

        RowNum = Util.SmplNumber
        self.LISTctl.InsertStringItem(RowNum,str(RowNum+1))
        self.LISTctl.SetStringItem(RowNum, 1, Util.SmplX[Util.SmplNumber])
        self.LISTctl.SetStringItem(RowNum, 2, Util.SmplY[Util.SmplNumber])
        self.LISTctl.SetStringItem(RowNum, 3, Util.SmplZ[Util.SmplNumber])
        self.LISTctl.SetStringItem(RowNum, 4, Util.SmplV[Util.SmplNumber])

ここで使用する変数は他で再利用するため、ファイルUtilで以下のように定義している。

SmplNumber = -1
SmplX = []
SmplY = []
SmplZ = []
SmplV = []