British単位系からSI系への換算ツール(2)

雛形だけ作った(下の写真)。このソフトでできることは次の通り(になる予定)。

  • British単位系での数値を入力する
  • (物理)量を選択する
  • 「換算」ボタンを押す
  • 換算された値がSI単位系で表示される


日本のほとんどの人にとっては使う機会はないだろうな。でも、このような単位系を日常で使っている国もあるんだよな。
ここまでのソース。wx.Choiceではなくて、wxPythonのデモにあったComboCtrlのクラスComboCtrlWithCustomPopupAnimを使おうとしたが、動かなかったのでやめた。

#!/bin/env python
# coding: utf-8
#------------------------------------------------------------------------
import wx
import os, sys

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]", "[J]", "[K]",
          "[kg/m^3]", "[kg/s]", "[kJ/kg]", "[Pa]", "[Pa]",
          "[W]"]

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= self.TxtCtl.GetValue()
        CNum = self.Chce.GetSelection()
        newString = "= " + 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()