最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+PyQt編寫一個數(shù)字轉(zhuǎn)大寫金額GUI工具

 更新時間:2025年09月08日 09:54:03   作者:Goona_  
在財務數(shù)據(jù)處理場景中,數(shù)字金額的大寫轉(zhuǎn)換是確保票據(jù)準確性和防偽性的重要環(huán)節(jié),本文將使用Python和PyQt編寫一個數(shù)字轉(zhuǎn)大寫金額GUI工具,有需要的小伙伴可以了解下

一、引言

在財務數(shù)據(jù)處理場景中,數(shù)字金額的大寫轉(zhuǎn)換是確保票據(jù)準確性和防偽性的重要環(huán)節(jié)。以跨平臺GUI框架PyQt為主體,再將用戶輸入的數(shù)字通過規(guī)范化處理,自動轉(zhuǎn)換為符合規(guī)定的標準大寫格式(如壹、貳、佰、萬等),同時支持零、整等特殊情況的分類判斷。這種自動化轉(zhuǎn)換不僅避免了人工輸入錯誤的風險,還能顯著提升財務人員的工作效率,有效助力于適合報銷單、支票、合同等需要嚴格數(shù)字規(guī)范的場景。

二、GUI界面設計

使用PyQt5進行界面的搭建,界面如下:

初始界面搭建采用極簡風格。用戶通過輸入數(shù)字,再點擊“轉(zhuǎn)換!”,即可在下方彈出相應的大寫形式。

1.效果演示

當用戶輸入存在小數(shù)時,且在實際生活中,小數(shù)點后兩位分別表示金額中的“角”和“分”,因此程序?qū)π?shù)點以后的位數(shù)最多設置為2;當用戶輸入為純整數(shù)時,轉(zhuǎn)換后的結果要符合“XXXX元整”的格式。

2.相關提示

針對輸入為空和輸入為0這兩種無實義的情況,均會給出“請輸入有效數(shù)字”的提示。

3.界面設計.py

通過pyuic5產(chǎn)生的GUI界面代碼UI_CaiwuDaxie.py如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'UI_CaiwuDaxie.ui'
#
# Created by: PyQt5 UI code generator 5.15.11
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.setEnabled(True)
        Form.resize(500, 390)
        Form.setMinimumSize(QtCore.QSize(500, 390))
        Form.setMaximumSize(QtCore.QSize(500, 390))
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/image1.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Form.setWindowIcon(icon)
        self.label_5 = QtWidgets.QLabel(Form)
        self.label_5.setGeometry(QtCore.QRect(330, 50, 141, 31))
        font = QtGui.QFont()
        font.setFamily("Adobe Arabic")
        font.setPointSize(16)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        self.label_8 = QtWidgets.QLabel(Form)
        self.label_8.setGeometry(QtCore.QRect(90, 10, 371, 31))
        font = QtGui.QFont()
        font.setFamily("Adobe Arabic")
        font.setPointSize(18)
        font.setBold(False)
        font.setWeight(50)
        self.label_8.setFont(font)
        self.label_8.setObjectName("label_8")
        self.label_10 = QtWidgets.QLabel(Form)
        self.label_10.setGeometry(QtCore.QRect(410, 40, 71, 51))
        self.label_10.setText("")
        self.label_10.setPixmap(QtGui.QPixmap(":/image1.png"))
        self.label_10.setObjectName("label_10")
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(40, 110, 181, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(40, 150, 121, 16))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(40, 80, 91, 21))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(40, 180, 421, 191))
        font = QtGui.QFont()
        font.setFamily("Adobe Arabic")
        font.setPointSize(16)
        self.label_3.setFont(font)
        self.label_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.label_3.setText("")
        self.label_3.setTextFormat(QtCore.Qt.PlainText)
        self.label_3.setScaledContents(False)
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setWordWrap(True)
        self.label_3.setIndent(-1)
        self.label_3.setObjectName("label_3")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(260, 110, 191, 23))
        self.pushButton.setObjectName("pushButton")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "CaiwuDaxie"))
        self.label_5.setText(_translate("Form", "Designed By"))
        self.label_8.setText(_translate("Form", "財務辦公——數(shù)字金額轉(zhuǎn)大寫"))
        self.label.setText(_translate("Form", "大寫如下:"))
        self.label_2.setText(_translate("Form", "請輸入金額:"))
        self.pushButton.setText(_translate("Form", "轉(zhuǎn)換"))
import ziyuan_rc

三、主要程序詳解

1.導入模塊和全局變量

import sys
from UI_CaiwuDaxie import *
from PyQt5.QtWidgets import QApplication, QWidget
# 正則表達式
from PyQt5.QtGui import QRegExpValidator
# 保持窗口大小和qtdesigner中的一致
from PyQt5 import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)

shuzi_dict = {'0': '零',
              '1': '壹',
              '2': '貳',
              '3': '叁',
              '4': '肆',
              '5': '伍',
              '6': '陸',
              '7': '柒',
              '8': '捌',
              '9': '玖'}

導入前端頁面設計文件:UI_CaiwuDaxie.py;因需要對用戶輸入作規(guī)范要求,故導入QRegExpValidator;;不懂為啥需要導入Qtcore的,請看。最后定義數(shù)字與大寫數(shù)字的對應字典為全局變量,方便后續(xù)使用。

2.初始化設置

    def __init__(self):
        super(QWidget, self).__init__()
        self.setupUi(self)

        # 允許整數(shù)或最多兩位小數(shù)
        validator = QRegExpValidator(QtCore.QRegExp("^(?!0+\d)\d*\.?\d{0,2}$"))
        self.lineEdit.setValidator(validator)

        self.pushButton.clicked.connect(self.daxie)

首先通過正則表達式定義輸入格式:輸入內(nèi)容必須為數(shù)字,其他字符輸不進去;輸入整數(shù)和小數(shù)均可以,但要求小數(shù)部分的位數(shù)最多不超過兩位,即\d{0,2};且要求輸入的整數(shù)部分可以以“0”開頭,但不能出現(xiàn)兩個及兩個以上“0”連續(xù)開頭的情況,目的是避免類似于“00.XX”的不規(guī)范情況出現(xiàn)。最后將其應用于lineedit,這里巧妙使用正則表達式提取定義用戶輸入格式。

最后將pushbutton綁定于daxie。

3.大寫轉(zhuǎn)換

    def daxie(self):
        shuzi_str = self.lineEdit.text()

        if (shuzi_str == '0') or (shuzi_str == ''):
            # 無效輸入
            QtWidgets.QMessageBox.critical(self, "提示", "請輸入有效數(shù)字!")
        else:
            # 有效輸入
            if '.' in shuzi_str:
                # 用戶輸入有小數(shù)
                zhengshu_str, xiaoshu_str = shuzi_str.split('.')
                if zhengshu_str=='0':
                    # 整數(shù)部分為0,只處理小數(shù)部分
                    self.label_3.setText(xiaoshu(xiaoshu_str))
                else:
                    # 用戶輸入有零有整時
                    neirong_zhengshu = zhengshu(zhengshu_str)
                    neirong_xiaoshu = xiaoshu(xiaoshu_str)
                    self.label_3.setText(neirong_zhengshu+'元'+neirong_xiaoshu)
            else:
                # 用戶輸入為純整數(shù)
                neirong = zhengshu(shuzi_str)
                self.label_3.setText(neirong+'元整')

從lineedit獲取用戶輸入并將其存儲在shuzi_str中;判斷shuzi_str是否是有效輸入(非零、空值),若為無效輸入,給出“請輸入有效數(shù)字”的提示,反之將其細分為三種情況;判斷用戶輸入是否存在小數(shù)點“.”,可將輸入分為純整數(shù)輸入和小數(shù)輸入;對于純整數(shù)輸入,直接調(diào)用自定義函數(shù)zhengshu得到大寫結果,最后在末尾加上“元整”setText給label_3即可;對于小數(shù),若整數(shù)部分為0,按照日常生活,一般不讀“零元X角X分”,而直接是“X角X分”,故直接調(diào)用自定義函數(shù)xiaoshu;最后對于有整有小數(shù)的輸入,分別調(diào)用自定義函數(shù)zhengshu和xiaoshu,再在兩者結果中間添加銜接詞“元”setText給label_3即可。

4.自定義函數(shù)

def zhengshu(shu):
    jieguo = []

    for i in range(-len(shu), 0, 1):
        jieguo.append(shuzi_dict[shu[i]])
        if (-i)%4 == 0:
            jieguo.append('仟')
        elif (-i)%4 == 3:
            jieguo.append('佰')
        elif (-i)%4 == 2:
            jieguo.append('拾')
        elif (-i)%4 == 1:
            # 每4位為一組,判斷是否需要增加“萬”、“億”
            if (-i)//4 == 0:
                pass
            elif (-i)//4 == 1:
                jieguo.append('萬')
            elif (-i)//4 == 2:
                jieguo.append('億')
            else:
                # 最大只到“億”,可滿足日常財務基本使用需求,若想擴大進制,可在此繼續(xù)增加,與上同理
                pass

    return ''.join(jieguo)

def xiaoshu(shu):
    return shuzi_dict[shu[0]]+'角'+shuzi_dict[shu[1]]+'分'

對于自定義函數(shù)zhengshu:首先需要明確如何將數(shù)字轉(zhuǎn)換為對應的大寫漢字,這里采用負索引進行遍歷。對任意數(shù)字,最低位在最右,最高位在最左,按負索引遍歷契合我們?nèi)粘A晳T,只不過是多了一個負號“—”而已;再通過字典shuzi_dict獲取每個數(shù)字對應的大寫,并將其添加至lst中。

對于在何處分別添加“億”、“萬”、“仟”、“佰”、“拾”這些量詞,首先需要找到規(guī)律:對于任何一個數(shù)字,從低位到高位(及從右到左,也印證了最優(yōu)解是使用負索引)每四位一組,分別添加的是“萬”和“億”(如比“億”更大,同理添加,這里只到“億”,足以滿足日常財務轉(zhuǎn)換需求),若對負索引取反后再對4取整,為1則說明添加“萬”,為2則說明添加“億”(如比“億”更大,同理添加即可);而對于“仟”、“佰”、“拾”,需要對負索引取反后再對4取余,若余數(shù)為0,則添加“仟”;若余數(shù)為3,則添加“佰”;若余數(shù)為2,則添加“拾”;若余數(shù)為1,則說明下一位即將到4位一組的分界點,需要添加更大的計量單位(“萬”、“億”)

對于自定義函數(shù)xiaoshu,直接通過查詢字典shuzi_dict并返回拼接結果即可。

四、總程序代碼

import sys
from UI_CaiwuDaxie import *
from PyQt5.QtWidgets import QApplication, QWidget
# 正則表達式
from PyQt5.QtGui import QRegExpValidator
# 保持窗口大小和qtdesigner中的一致
from PyQt5 import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)

shuzi_dict = {'0': '零',
              '1': '壹',
              '2': '貳',
              '3': '叁',
              '4': '肆',
              '5': '伍',
              '6': '陸',
              '7': '柒',
              '8': '捌',
              '9': '玖'}

class login_interface(QWidget, Ui_Form):
    def __init__(self):
        super(QWidget, self).__init__()
        self.setupUi(self)

        # 允許整數(shù)或最多兩位小數(shù)
        validator = QRegExpValidator(QtCore.QRegExp("^(?!0+\d)\d*\.?\d{0,2}$"))
        self.lineEdit.setValidator(validator)

        self.pushButton.clicked.connect(self.daxie)

    def daxie(self):
        shuzi_str = self.lineEdit.text()

        if (shuzi_str == '0') or (shuzi_str == ''):
            # 無效輸入
            QtWidgets.QMessageBox.critical(self, "提示", "請輸入有效數(shù)字!")
        else:
            # 有效輸入
            if '.' in shuzi_str:
                # 用戶輸入有小數(shù)
                zhengshu_str, xiaoshu_str = shuzi_str.split('.')
                if zhengshu_str=='0':
                    # 整數(shù)部分為0,只處理小數(shù)部分
                    self.label_3.setText(xiaoshu(xiaoshu_str))
                else:
                    # 用戶輸入有零有整時
                    neirong_zhengshu = zhengshu(zhengshu_str)
                    neirong_xiaoshu = xiaoshu(xiaoshu_str)
                    self.label_3.setText(neirong_zhengshu+'元'+neirong_xiaoshu)
            else:
                # 用戶輸入為純整數(shù)
                neirong = zhengshu(shuzi_str)
                self.label_3.setText(neirong+'元整')
def zhengshu(shu):
    jieguo = []

    for i in range(-len(shu), 0, 1):
        jieguo.append(shuzi_dict[shu[i]])
        if (-i)%4 == 0:
            jieguo.append('仟')
        elif (-i)%4 == 3:
            jieguo.append('佰')
        elif (-i)%4 == 2:
            jieguo.append('拾')
        elif (-i)%4 == 1:
            # 每4位為一組,判斷是否需要增加“萬”、“億”
            if (-i)//4 == 0:
                pass
            elif (-i)//4 == 1:
                jieguo.append('萬')
            elif (-i)//4 == 2:
                jieguo.append('億')
            else:
                # 最大只到“億”,可滿足日常財務基本使用需求,若想擴大進制,可在此繼續(xù)增加,與上同理
                pass

    return ''.join(jieguo)

def xiaoshu(shu):
    return shuzi_dict[shu[0]]+'角'+shuzi_dict[shu[1]]+'分'

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = login_interface()
    w.show()
    sys.exit(app.exec_())

到此這篇關于Python+PyQt編寫一個數(shù)字轉(zhuǎn)大寫金額GUI工具的文章就介紹到這了,更多相關Python數(shù)字轉(zhuǎn)大寫金額內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python sklearn使用步驟

    Python sklearn使用步驟

    sklearn是Python機器學習庫,提供數(shù)據(jù)預處理、模型訓練、評估等工具,支持多種算法,設計注重一致性與易用性,擁有活躍社區(qū)和豐富資源,本文給大家介紹Python sklearn使用步驟,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • Python實現(xiàn)自動合并Word并添加分頁符

    Python實現(xiàn)自動合并Word并添加分頁符

    這篇文章主要為大家詳細介紹了如何基于Python實現(xiàn)對多個Word文檔加以自動合并,并在每次合并時按要求增添一個分頁符的功能,感興趣的可以了解一下
    2023-02-02
  • python中requests模塊的使用方法

    python中requests模塊的使用方法

    這篇文章主要介紹了python中requests模塊的使用方法,實例分析了requests模塊的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • Python標準庫之加密模塊詳解

    Python標準庫之加密模塊詳解

    這篇文章主要為大家詳細介紹了Python標準庫中加密模塊的相關知識,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下
    2023-07-07
  • 使用Python協(xié)程實現(xiàn)支持斷點續(xù)傳的文件下載器

    使用Python協(xié)程實現(xiàn)支持斷點續(xù)傳的文件下載器

    協(xié)程是一種多方協(xié)同的工作方式,協(xié)程不是進程或線程,其執(zhí)行過程類似于 Python 函數(shù)調(diào)用,協(xié)程是對使用 async 關鍵字定義的異步函數(shù)的調(diào)用,本文介紹了如何使用Python協(xié)程實現(xiàn)支持斷點續(xù)傳的文件下載器,需要的朋友可以參考下
    2025-09-09
  • 探究Python中isalnum()方法的使用

    探究Python中isalnum()方法的使用

    這篇文章主要介紹了探究Python中isalnum()方法的使用,是Python入門學習中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • Caffe數(shù)據(jù)可視化環(huán)境python接口配置教程示例

    Caffe數(shù)據(jù)可視化環(huán)境python接口配置教程示例

    這篇文章主要為大家介紹了Caffe數(shù)據(jù)可視化環(huán)境python接口配置教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 利用django-suit模板添加自定義的菜單、頁面及設置訪問權限

    利用django-suit模板添加自定義的菜單、頁面及設置訪問權限

    這篇文章主要給大家介紹了關于利用django-suit模板添加自定義的菜單、頁面及設置訪問權限的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起看看吧
    2018-07-07
  • Python利用matplotlib實現(xiàn)繪制密度散點圖

    Python利用matplotlib實現(xiàn)繪制密度散點圖

    這篇文章主要介紹了如何基于Python語言的matplotlib模塊,對Excel表格文件中的指定數(shù)據(jù)加以密度散點圖繪制的方法,有需要的小伙伴可以參考下
    2024-04-04
  • Python使用openpyxl設置Excel單元格公式和工作簿合并

    Python使用openpyxl設置Excel單元格公式和工作簿合并

    這篇文章主要介紹了如何使用Python的openpyxl庫在Excel單元格中設置公式,并展示了如何引用其他工作簿中的單元格內(nèi)容以及如何合并多個工作簿,需要的朋友可以參考下
    2025-11-11

最新評論

维西| 同江市| 中牟县| 贺兰县| 榆林市| 汶川县| 新郑市| 若尔盖县| 信阳市| 新营市| 宁德市| 乃东县| 卢湾区| 蒙山县| 张家川| 哈巴河县| 古蔺县| 崇礼县| 镶黄旗| 镇赉县| 佛冈县| 肇源县| 奎屯市| 山阴县| 无为县| 海宁市| 鄄城县| 大庆市| 东城区| 顺义区| 平远县| 宁安市| 宾阳县| 阿鲁科尔沁旗| 永康市| 尉犁县| 慈利县| 达尔| 南昌县| 黎城县| 西乌珠穆沁旗|