wxPython实践(2)

来源:互联网 发布:疯狂java讲义第6版 编辑:程序博客网 时间:2024/06/05 06:51

 

写了一个简单的小工具,用于转换小写数字成中文大写,下面是代码:
# -*- coding: cp936 -*-
from wxPython.wx import *
from wxPython.html import *

def TransformDigital(digitalVal) :
    num = ''
    dig = ''
    digIndex = digitalVal.find('.', 0)
    if digIndex == -1 : # "." not in digitalVal
        num = digitalVal
        dig = ""
    else :
        num = digitalVal[0 : digIndex]
        dig = digitalVal[digIndex + 1 : ]
    dw2 = ["",   "万", "亿"]
    dw1 = ["拾", "佰", "千"]
    dw =  ["",   "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]
    dws = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]
    k1 = 0
    k2 = 0
    retString = "";
    strdig = ''
    lenString = len(num)
    for i in range(lenString) :
        n = num[lenString - i - 1]
        if n == "0" :
            if k1 != 0 :
                retString = retString[1, lenString- 1]
        dd = int(n)
        retString = dw[dd] + retString
        tempval = lenString - i - 1
        if tempval > 0 :
            if k1 != 3 :
                retString = dw1[k1] + retString
                k1 = k1 + 1
            else :
                k1 = 0
                temp = retString[0]
                if temp == "万" or temp == "亿" :
                    retString = retString[1, lenString - 1]
                retString = dw2[k2] + retString
        if k1 == 3 :
            k2 = k2 + 1
    lenString = len(dig)
    lenString = min(lenString, 2)
    i = 0
    for i in range(lenString) :
        n = dig[i]
        strdig = strdig + dws[int(n)]
    if strdig != '零零' and lenString > 0 :
        retString = retString + " 点 " + strdig

    return retString

class MySecondFrame(wxFrame):
    def __init__(self):
        # generated method, don't edit
        wxFrame.__init__(self, None, -1, 'MySecondFrame')
        self.myintxt = wxTextCtrl(id=100, name='mytxt',
              parent=self, pos=wxPoint(40, 24), size=wxSize(312, 22), style=0,
              value='0')
        self.myintxt.SetMaxLength(16)
        self.MyGo = wxButton(id=102, label='Go', name='MyGo',
              parent=self, pos=wxPoint(304, 144), size=wxSize(75, 24),
              style=0)
        self.myouttxt = wxTextCtrl(id=103, name='mytxt',
              parent=self, pos=wxPoint(40, 84), size=wxSize(312, 22), style=0,
              value='')
        self.myouttxt.SetEditable(False)
        EVT_BUTTON(self, 102, self.OnMyGoButton)
        self.Show(True)

    def OnMyGoButton(self, event):
        intext = self.myintxt.GetValue()
        myret = TransformDigital(intext)
        self.myouttxt.SetValue(myret)
        event.Skip()

calculator = wxPySimpleApp()
MySecondFrame()
calculator.MainLoop()
   
通过这个功能的实现,在开发过程中还是发现了以下几个问题:
1) tab和空格不一致,由于一些代码是从原来的网页上拷贝下来的,所以它的代码变成了空格,而在写新的代码的时候采用的TAB,所以在运行时出现了错误。
2) 编程习惯,由于自己一直用C/C++进行编程,所以在一些写法上没有完全按照Python语言的特点来写,习惯性的加入;和{}
3) 没有了编译功能,对于一些错误没有办法检查,由于一些变量的作用域的问题,没有办法通过编译功能知道,必须在运行时发现有错误才能修改。比如象++k,事实上并没有改变k的值。
4)没有找到一个好的调试器,所以花了很多的时间用于修改BUG
5)对中文支持不好