表を作る(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 = []