British単位系からSI系への換算ツール(3)
一応すべて実装した。このソフトでできることは次の通り(のはず)。
適当に選んで実行してみる。
図2:長さの場合(これは単なる掛け算)
図3:温度の場合(これは掛け算と足し算)
図4:圧力の場合(え?ちょっと違う?)
以下、ソース。
#!/bin/env python # coding: utf-8 # BritishUnit.py (2009/07/11 23:58:30) #------------------------------------------------------------------------ import wx import os, sys import time ChoiceList = ["Length [ft]", "Area [ft^2]", "Velocity [ft/s]", "Mass [lbm]", "Energy [Btu]", "Temperature [F]", "Density [lbm/ft^3]", "Mass flux [lbm/s]", "Enthalpy [Btu/lbm]", "Pressure [psia]", "Pressure [lbf/ft^2]", "Heat [Btu/s]"] SIList = ["[m]", "[m^2]", "[m/s]", "[kg]", "[kJ]", "[C]", "[kg/m^3]", "[kg/s]", "[kJ/kg]", "[Pa]", "[Pa]", "[W]"] coeff = [0.3048, 0.3048**2, 0.3048, 0.45359237, 1.055, 5.0/9.0, 0.45359237/(0.3048)**3, 0.45359237, 1.055/0.45359237, 703.07*9806.65, 4.44822/(0.3048)**2, 1055.0] bb = [0.0, 0.0, 0.0, 0.0, 0.0, 32.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] class MainFrame(wx.Frame): def __init__(self, id, title): width, height = 450,120 wx.Frame.__init__(self, id, title=u"Changing Unit", size=wx.Size(width, height)) Pan = wx.Panel(self, -1) self.Chce = wx.Choice(Pan, -1, choices=ChoiceList) self.TxtCtl = wx.TextCtrl(Pan, -1, "Enter a value", size=(130,-1)) self.StTxt1 = wx.StaticText(Pan, -1, u" = ") self.Btn = wx.Button(Pan, -1, u"換算する") self.Chce.Bind(wx.EVT_CHOICE, self.OnChoice) self.Btn.Bind(wx.EVT_BUTTON, self.ConvUnit) vsizer0 = wx.BoxSizer(wx.VERTICAL) hsizer1 = wx.BoxSizer(wx.HORIZONTAL) hsizer1.Add(self.TxtCtl, 0, wx.ALIGN_LEFT|wx.ALL, 5) hsizer1.Add(self.Chce, 0, wx.ALIGN_LEFT|wx.ALL, 5) hsizer1.Add(self.StTxt1, 0, wx.ALIGN_LEFT|wx.ALL, 5) vsizer0.Add(hsizer1,0, wx.ALIGN_LEFT|wx.ALL, 5) vsizer0.Add(self.Btn,0, wx.ALIGN_LEFT|wx.ALL, 5) Pan.SetSizer(vsizer0) vsizer0.Fit(Pan) def OnChoice(self, event): pass def ConvUnit(self, event): BtVal= float(self.TxtCtl.GetValue()) CNum = self.Chce.GetSelection() SiVal= (BtVal-bb[CNum])*coeff[CNum] newString = "= " + str(SiVal) + SIList[CNum] self.StTxt1.SetLabel(newString) class Application(wx.App): def OnInit(self): frame = MainFrame(None, -1) frame.Show(True) self.SetTopWindow(frame) return True def main(): app = Application(0) app.MainLoop() if __name__ == '__main__': main()