辉宇星空 文章分享 使用PySide2开发Python程序的图形界面软件—多功能计算器源码公示

使用PySide2开发Python程序的图形界面软件—多功能计算器源码公示

源代码文件:hy-calc.py ======================================…

源代码文件:hy-calc.py

# coding = utf-8

# ======================================
#     author:liwenhui
#     date:2023-01
# =====================================
#    _    _            __     __
#   | |  | |        (_)\ \   / /
#   | |__| | _   _   _  \ \_/ / _   _
#   |  __  || | | | | |  \   / | | | |
#   | |  | || |_| | | |   | |  | |_| |
#   |_|  |_|\__,_|  |_|   |_|  \__,__|
# -----------------------------
#   webAdd: huiyu1688.top
# ======================================

import sys
from math import sin, sinh, cos, cosh, tan, tanh, log, sqrt, factorial, radians, pi
import random
import math
import PySide2.QtWidgets
from PySide2.QtWidgets import QMessageBox
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QTimer, QDateTime, Qt
from PySide2 import QtGui
# 计算结果数字转大写要引入的库
import warnings
from decimal import Decimal

import re  #正则表达式


def cncurrency(value, capital=True, prefix=False, classical=None):
	"""
	参数:
	capital:    True   大写汉字金额
				False  一般汉字金额
	classical:  True   元
				False  圆
	prefix:     True   以'人民币'开头
				False, 无开头
	"""

	if not isinstance(value, (Decimal, str, int)):
		msg = '''
        由于浮点数精度问题,请考虑使用字符串,或者 decimal.Decimal 类。
        因使用浮点数造成误差而带来的可能风险和损失作者概不负责。
        '''
		warnings.warn(msg, UserWarning)
	# 默认大写金额用圆,一般汉字金额用元
	if classical is None:
		classical = True if capital else False

	# 汉字金额前缀
	if prefix is True:
		prefix = '人民币'
	else:
		prefix = ''

	# 汉字金额字符定义
	dunit = ('角', '分')
	if capital:
		num = ('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖')
		iunit = [None, '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟', '万', '拾', '佰', '仟']
	else:
		num = ('〇', '一', '二', '三', '四', '五', '六', '七', '八', '九')
		iunit = [None, '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千', '万', '十', '百', '千']
	if classical:
		iunit[0] = '元' if classical else '圆'
	# 转换为Decimal,并截断多余小数

	if not isinstance(value, Decimal):
		value = Decimal(value).quantize(Decimal('0.01'))

	# 处理负数
	if value < 0:
		prefix += '负'  # 输出前缀,加负
		value = - value  # 取正数部分,无须过多考虑正负数舍入
	# assert - value + value == 0
	# 转化为字符串
	s = str(value)
	if len(s) > 19:
		raise ValueError('金额太大了,不知道该怎么表达。')
	istr, dstr = s.split('.')  # 小数部分和整数部分分别处理
	istr = istr[::-1]  # 翻转整数部分字符串
	so = []  # 用于记录转换结果

	# 零
	if value == 0:
		return prefix + num[0] + iunit[0]
	haszero = False  # 用于标记零的使用
	if dstr == '00':
		haszero = True  # 如果无小数部分,则标记加过零,避免出现“圆零整”

	# 处理小数部分
	# 分
	if dstr[1] != '0':
		so.append(dunit[1])
		so.append(num[int(dstr[1])])
	else:
		so.append('整')  # 无分,则加“整”
	# 角
	if dstr[0] != '0':
		so.append(dunit[0])
		so.append(num[int(dstr[0])])
	elif dstr[1] != '0':
		so.append(num[0])  # 无角有分,添加“零”
		haszero = True  # 标记加过零了

	# 无整数部分
	if istr == '0':
		if haszero:  # 既然无整数部分,那么去掉角位置上的零
			so.pop()
		so.append(prefix)  # 加前缀
		so.reverse()  # 翻转
		return ''.join(so)

	# 处理整数部分
	for i, n in enumerate(istr):
		n = int(n)
		if i % 4 == 0:  # 在圆、万、亿等位上,即使是零,也必须有单位
			if i == 8 and so[-1] == iunit[4]:  # 亿和万之间全部为零的情况
				so.pop()  # 去掉万
			so.append(iunit[i])
			if n == 0:  # 处理这些位上为零的情况
				if not haszero:  # 如果以前没有加过零
					so.insert(-1, num[0])  # 则在单位后面加零
					haszero = True  # 标记加过零了
			else:  # 处理不为零的情况
				so.append(num[n])
				haszero = False  # 重新开始标记加零的情况
		else:  # 在其他位置上
			if n != 0:  # 不为零的情况
				so.append(iunit[i])
				so.append(num[n])
				haszero = False  # 重新开始标记加零的情况
			else:  # 处理为零的情况
				if not haszero:  # 如果以前没有加过零
					so.append(num[0])
					haszero = True

	# 最终结果
	so.append(prefix)
	so.reverse()
	return ''.join(so)

def textFilter(str1):
	"""
	== 文本过滤器 ==
	:param str1: 原始字符串
	:return: 过滤转换后的字符串 用于eval运算
	"""
	temp_str = str1
	# 乘法符号替换
	temp_str = temp_str.replace('×', '*')
	# 除法÷符号替换
	temp_str = temp_str.replace('÷', '/')

	# 1/x 符号替换
	temp_str = temp_str.replace('DS','self.DS')
	# rad符号替换
	temp_str = temp_str.replace('rad', 'radians')
	# log符号替换
	temp_str = temp_str.replace('log', 'self.log')
	# ln符号替换
	temp_str = temp_str.replace('ln', 'log')
	# 阶乘符号替换
	temp_str = temp_str.replace('fac', 'factorial')

	# e符号替换
	#temp_str = temp_str.replace('⒠', 'math.e')
	# e^x符号替换
	temp_str = temp_str.replace('exp','self.exp')
	# √符号替换
	#temp_str = temp_str.replace('√', 'sqrt')

	# n√符号替换
	temp_str = temp_str.replace('Nsqrt', 'self.Nsqrt')
	# sum 符号替换
	temp_str = temp_str.replace('sum', 'self.sum')
	# ave 符号替换
	temp_str = temp_str.replace('ave', 'self.average')
	# x^y 符号替换
	temp_str = temp_str.replace('pow', 'self.pow')

	# 圆周长
	temp_str = temp_str.replace('CirCum', 'self.CirCum')
	# 圆面积
	temp_str = temp_str.replace('CirArea','self.CirArea')
	# 定长随机数
	temp_str = temp_str.replace('rand', 'self.rand')
	# 球体积
	temp_str = temp_str.replace('ballVol', 'self.ballVol')
	# 正比例尾值
	temp_str = temp_str.replace('ZhengBi', 'self.ZhengBi')
	# 三角形斜边长
	temp_str = temp_str.replace('trgbevel', 'self.trgbevel')
	# 三角形面积
	temp_str = temp_str.replace('Helen', 'self.Helen')
	# 等差数列求和
	temp_str = temp_str.replace('DengCha', 'self.DengCha')
	# 球冠体积
	temp_str = temp_str.replace('crownVol', 'self.crownVol')
	# 最大公约数
	temp_str = temp_str.replace('maxGYS', 'self.maxGYS')
	# 最小公倍数
	temp_str = temp_str.replace('minGBS', 'self.minGBS')

	# %符号替换
	temp_str = temp_str.replace('%', '/100')  # 待定 加括号

	# mod符号替换
	temp_str = temp_str.replace('mod', 'math.fmod')

	# 测试用,正式发布前删除
	# print("tem_str =", temp_str)

	return temp_str

def textBitOpera(str1):
	"""
	== 位运算文本过滤器 ==
	:param str1: 原始字符串
	:return: 过滤转换后的字符串 用于eval运算
	"""
	temp_str = str1
	# 乘法符号替换
	temp_str = temp_str.replace('×', '*')
	# 除法÷符号替换
	temp_str = temp_str.replace('÷', '//')

	return temp_str

class HyCalc:
	def __init__(self):
		# M1~M3 缓存
		self.m1 = 0
		self.m2 = 0
		self.m3 = 0
		self.mState = "M1"

		# GT 累计值缓存
		self.val_GT = 0

		# 是否进入运算的开关 True表示进入
		self.is_equ_switch = False

		# 从文件中加载UI
		self.ui = QUiLoader().load('Own_Folder/hy-calc.ui')
		# 设置窗口图标
		self.ui.setWindowIcon(QtGui.QIcon("Own_Folder/img/logo.png"))
		# 大写显示区设置为零
		self.ui.edit_daxie.setText("零")
		# 函数切换(新开功能)标志
		self.ui.lab_switch.clear()
		# 设置函数切换按钮的图标
		self.ui.btn_OnOff.setIcon(QtGui.QIcon("Own_Folder/img/off.png"))
		# 设置自然数幂按钮的按钮图标
		self.ui.btn_ex.setIcon(QtGui.QIcon("Own_Folder/img/ex.png"))
		# 设置N方根按钮的按钮图标
		self.ui.btn_Nsquare.setIcon(QtGui.QIcon("Own_Folder/img/NRoot.png"))
		# 设置y次方按钮的按钮图标
		self.ui.btn_xy.setIcon(QtGui.QIcon("Own_Folder/img/xy.png"))
		# 设置退格按钮的按钮图标
		self.ui.btn_backspace.setIcon(QtGui.QIcon("Own_Folder/img/backspace.png"))

		# 显示时间
		self.Timer = QTimer()
		self.Timer.start(2000)
		self.Timer.timeout.connect(self.update_time)

		# 计算结果单行框被修改事件信号槽
		self.ui.edit_exp.textChanged.connect(self.edit_exp_textChanged)

		# M1-M3 单选框单击事件信号槽
		self.ui.radio_m1.clicked.connect(self.radio_m1_clicked)
		self.ui.radio_m2.clicked.connect(self.radio_m2_clicked)
		self.ui.radio_m3.clicked.connect(self.radio_m3_clicked)
		# e^x log x!按钮单击事件信号槽
		self.ui.btn_ex.clicked.connect(self.btn_ex_clicked)
		self.ui.btn_log.clicked.connect(self.btn_log_clicked)
		self.ui.btn_factorial.clicked.connect(self.btn_factorial_clicked)
		# π e ln √ n√按钮单击事件信号槽
		self.ui.btn_pi.clicked.connect(self.btn_pi_clicked)
		self.ui.btn_ave.clicked.connect(self.btn_ave_clicked)
		self.ui.btn_ln.clicked.connect(self.btn_ln_clicked)
		self.ui.btn_square.clicked.connect(self.btn_square_clicked)
		self.ui.btn_Nsquare.clicked.connect(self.btn_Nsquare_clicked)
		# sum x^y 按钮单击事件信号槽
		self.ui.btn_sum.clicked.connect(self.btn_sum_clicked)
		self.ui.btn_xy.clicked.connect(self.btn_xy_clicked)
		# on/off 按钮单击事件信号槽
		self.ui.btn_OnOff.clicked.connect(self.btn_OnOff_clicked)
		# sin cos tan 1/x rad 按钮单击事件信号槽
		self.ui.btn_sin.clicked.connect(self.btn_sin_clicked)
		self.ui.btn_cos.clicked.connect(self.btn_cos_clicked)
		self.ui.btn_tan.clicked.connect(self.btn_tan_clicked)
		self.ui.btn_1divX.clicked.connect(self.btn_1divX_clicked)
		self.ui.btn_radians.clicked.connect(self.btn_radians_clicked)
		# MC M+ M- MR MC按钮单击事件信号槽
		self.ui.btn_Madd.clicked.connect(self.btn_Madd_clicked)
		self.ui.btn_Msub.clicked.connect(self.btn_Msub_clicked)
		self.ui.btn_MR.clicked.connect(self.btn_MR_clicked)
		self.ui.btn_MC.clicked.connect(self.btn_MC_clicked)
		# CE AC 退格 %  GT = 按钮单击事件信号槽
		self.ui.btn_CE.clicked.connect(self.btn_CE_clicked)
		self.ui.btn_AC.clicked.connect(self.btn_AC_clicked)
		self.ui.btn_backspace.clicked.connect(self.btn_backspace_clicked)
		self.ui.btn_per.clicked.connect(self.btn_per_clicked)
		self.ui.btn_GT.clicked.connect(self.btn_GT_clicked)
		self.ui.btn_equ.clicked.connect(self.btn_equ_clicked)

		# 逗号、数字0-9、小数点按钮单击事件信号槽
		self.ui.btn_douhao.clicked.connect(self.btn_douhao_clicked)
		self.ui.btn_num0.clicked.connect(self.btn_num0_clicked)
		self.ui.btn_num1.clicked.connect(self.btn_num1_clicked)
		self.ui.btn_num2.clicked.connect(self.btn_num2_clicked)
		self.ui.btn_num3.clicked.connect(self.btn_num3_clicked)
		self.ui.btn_num4.clicked.connect(self.btn_num4_clicked)
		self.ui.btn_num5.clicked.connect(self.btn_num5_clicked)
		self.ui.btn_num6.clicked.connect(self.btn_num6_clicked)
		self.ui.btn_num7.clicked.connect(self.btn_num7_clicked)
		self.ui.btn_num8.clicked.connect(self.btn_num8_clicked)
		self.ui.btn_num9.clicked.connect(self.btn_num9_clicked)
		self.ui.btn_numDot.clicked.connect(self.btn_numDot_clicked)
		# 左右括号按钮单击事件信号槽
		self.ui.btn_leftBracked.clicked.connect(self.btn_leftBracked_clicked)
		self.ui.btn_rightBracked.clicked.connect(self.btn_rightBracked_clicked)
		# 加减乘除按钮单击事件信号槽 + - ÷ ×
		self.ui.btn_add.clicked.connect(self.btn_add_clicked)
		self.ui.btn_sub.clicked.connect(self.btn_sub_clicked)
		self.ui.btn_ride.clicked.connect(self.btn_ride_clicked)
		self.ui.btn_div.clicked.connect(self.btn_div_clicked)

		#第二屏,特殊专用型按键
		self._funSelect = ''  #功能选择
		# M1-M3 单选框单击事件信号槽
		self.ui.radio_m1_2.clicked.connect(self.radio_m1_clicked)
		self.ui.radio_m2_2.clicked.connect(self.radio_m2_clicked)
		self.ui.radio_m3_2.clicked.connect(self.radio_m3_clicked)
		# MC M+ M- MR 按钮单击事件信号槽
		self.ui.btn_MC_2.clicked.connect(self.btn_MC_clicked)
		self.ui.btn_Madd_2.clicked.connect(self.btn_Madd_clicked)
		self.ui.btn_Msub_2.clicked.connect(self.btn_Msub_clicked)
		self.ui.btn_MR_2.clicked.connect(self.btn_MR_clicked)
		# CE 退格 Enter按钮单击事件信号槽
		self.ui.btn_CE_2.clicked.connect(self.btn_CE_clicked)
		self.ui.btn_backspace_2.clicked.connect(self.btn_backspace_clicked)
		self.ui.btn_enter.clicked.connect(self.btn_enter_clicked)
		# 逗号、数字0-9、小数点按钮单击事件信号槽
		self.ui.btn_douhao_2.clicked.connect(self.btn_douhao_clicked)
		self.ui.btn_num0_2.clicked.connect(self.btn_num0_clicked)
		self.ui.btn_num1_2.clicked.connect(self.btn_num1_clicked)
		self.ui.btn_num2_2.clicked.connect(self.btn_num2_clicked)
		self.ui.btn_num3_2.clicked.connect(self.btn_num3_clicked)
		self.ui.btn_num4_2.clicked.connect(self.btn_num4_clicked)
		self.ui.btn_num5_2.clicked.connect(self.btn_num5_clicked)
		self.ui.btn_num6_2.clicked.connect(self.btn_num6_clicked)
		self.ui.btn_num7_2.clicked.connect(self.btn_num7_clicked)
		self.ui.btn_num8_2.clicked.connect(self.btn_num8_clicked)
		self.ui.btn_num9_2.clicked.connect(self.btn_num9_clicked)
		self.ui.btn_numDot_2.clicked.connect(self.btn_numDot_clicked)
		self.ui.btn_fuHao.clicked.connect(self.btn_fuHao_clicked)
		#一元二次方程
		self.ui.btn_12FangCheng.clicked.connect(self.btn_12FangCheng_clicked)
		# 凸四边形面积
		self.ui.btn_XibianXing.clicked.connect(self.btn_XibianXing_clicked)
		# 球的表面积
		self.ui.btn_ballSurfaceArea.clicked.connect(self.btn_ballSurfaceArea_clicked)
		# 圆环体积
		self.ui.btn_torusVol.clicked.connect(self.btn_torusVol_clicded)
		#圆柱体积
		self.ui.btn_CylinderVol.clicked.connect(self.btn_CylinderVol_clicked)
		#圆柱表面积
		self.ui.btn_CylinderArea.clicked.connect(self.btn_CylinderArea_clicked)
		#圆锥体积
		self.ui.btn_conicalVol.clicked.connect(self.btn_conicalVol_clicked)
		#圆锥表面积
		self.ui.btn_conicalSurfaceArea.clicked.connect(self.btn_conicalSurfaceArea_clicked)
		# 正N边形面积
		self.ui.btn_Npolygon.clicked.connect(self.btn_Npolygon_clicked)
		# 三角形角平分线长度
		self.ui.btn_trgAngleline.clicked.connect(self.btn_trgAngleline_clicked)
		#三角形中线
		self.ui.btn_triangularCenterline.clicked.connect(self.btn_triangularCenterline_clicked)
		#数字字母混合随机数
		self.ui.btn_numAzRandom.clicked.connect(self.btn_numAzRandom_clicked)
		#等分裁图计算
		self.ui.btn_dengFengCut.clicked.connect(self.btn_dengFengCut_clicked)
		#差分裁图工具
		self.ui.btn_chaFengCut.clicked.connect(self.btn_chaFengCut_clicked)
		#国税定税点
		self.ui.btn_guoShuiDian1.clicked.connect(self.btn_guoShuiDian1_clicked)
		#国税定税点2
		self.ui.btn_guoShuiDian2.clicked.connect(self.btn_guoShuiDian2_clicked)

		# 第三屏,程序员专用型state
		self._jinZhiState = 10   # 默认进制选择为10进制
		self._bitWidth = 64  #默认位宽为64位
		self._binByteShow = '00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000'
		self._operaAreaValState = []   #表达式运算区数字串缓存 用于lab_64bitShow标签的显示
		self.expAreaString = '' # 表达式运算区字符串
		# 两种按钮样式
		self._ButtonStyleA = """QPushButton { background-color: rgb(78, 106, 120); 
				                                border:2px groove gray;
				                                border-radius: 6px; color: 
				                                rgb(250, 250, 250); } 
		                        QPushButton:hover { background-color: rgb(205, 233, 202); }
		                        QPushButton:pressed { background-color: rgb(186, 202, 199); }"""
		self._ButtonStyleB = """QPushButton { background-color: rgb(138, 138, 138); 
						                                border:2px groove gray;
						                                border-radius: 6px; color: 
						                                rgb(250, 250, 250); } 
				                        QPushButton:hover { background-color: rgb(205, 233, 202); }
				                        QPushButton:pressed { background-color: rgb(186, 202, 199); }"""
		self._ButtonStyleA2 = """QPushButton { background-color: rgb(220, 88, 0); 
								                                border:2px groove gray;
								                                border-radius: 6px; color: 
								                                rgb(250, 250, 250); } 
						                        QPushButton:hover { background-color: rgb(205, 233, 202); }
						                        QPushButton:pressed { background-color: rgb(186, 202, 199); }"""

		#A-F 16进制专用按钮先禁用
		self.ui.btn_numA.setEnabled(False)
		self.ui.btn_numB.setEnabled(False)
		self.ui.btn_numC.setEnabled(False)
		self.ui.btn_numD.setEnabled(False)
		self.ui.btn_numE.setEnabled(False)
		self.ui.btn_numF.setEnabled(False)
		self.ui.btn_numA.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numB.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numC.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numD.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numE.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numF.setStyleSheet(self._ButtonStyleB)

		# M1-M3 单选框单击事件信号槽
		self.ui.radio_m1_3.clicked.connect(self.radio_m1_clicked)
		self.ui.radio_m2_3.clicked.connect(self.radio_m2_clicked)
		self.ui.radio_m3_3.clicked.connect(self.radio_m3_clicked)
		# 进制单选框单击事件信号槽
		self.ui.radio_bin.clicked.connect(self.radio_bin_clicked)
		self.ui.radio_oct.clicked.connect(self.radio_oct_clicked)
		self.ui.radio_hex.clicked.connect(self.radio_hex_clicked)
		self.ui.radio_dec.clicked.connect(self.radio_dec_clicked)
		# 位宽单选框单击事件信号槽
		self.ui.radio_8bit.clicked.connect(self.radio_8bit_clicked)
		self.ui.radio_16bit.clicked.connect(self.radio_16bit_clicked)
		self.ui.radio_32bit.clicked.connect(self.radio_32bit_clicked)
		self.ui.radio_64bit.clicked.connect(self.radio_64bit_clicked)
		# MC M+ M- MR 按钮单击事件信号槽radio_bin
		self.ui.btn_MC_3.clicked.connect(self.btn_MC_clicked)
		self.ui.btn_Madd_3.clicked.connect(self.btn_Madd_clicked)
		self.ui.btn_Msub_3.clicked.connect(self.btn_Msub_clicked)
		self.ui.btn_MR_3.clicked.connect(self.btn_MR_clicked)
		# CE 退格按钮单击事件信号槽
		self.ui.btn_CE_3.clicked.connect(self.btn_CE_3_clicked)
		self.ui.btn_backspace_3.clicked.connect(self.btn_backspace_3_clicked)
		# 数字0-9 按钮单击事件信号槽
		self.ui.btn_num0_3.clicked.connect(self.btn_num0_3_clicked)
		self.ui.btn_num1_3.clicked.connect(self.btn_num1_3_clicked)
		self.ui.btn_num2_3.clicked.connect(self.btn_num2_3_clicked)
		self.ui.btn_num3_3.clicked.connect(self.btn_num3_3_clicked)
		self.ui.btn_num4_3.clicked.connect(self.btn_num4_3_clicked)
		self.ui.btn_num5_3.clicked.connect(self.btn_num5_3_clicked)
		self.ui.btn_num6_3.clicked.connect(self.btn_num6_3_clicked)
		self.ui.btn_num7_3.clicked.connect(self.btn_num7_3_clicked)
		self.ui.btn_num8_3.clicked.connect(self.btn_num8_3_clicked)
		self.ui.btn_num9_3.clicked.connect(self.btn_num9_3_clicked)
		# 左右括号按钮单击事件信号槽
		self.ui.btn_leftBracked_3.clicked.connect(self.btn_leftBracked_3_clicked)
		self.ui.btn_rightBracked_3.clicked.connect(self.btn_rightBracked_3_clicked)
		# 16进制字母A-F按钮单击事件信号槽
		self.ui.btn_numA.clicked.connect(self.btn_numA_clicked)
		self.ui.btn_numB.clicked.connect(self.btn_numB_clicked)
		self.ui.btn_numC.clicked.connect(self.btn_numC_clicked)
		self.ui.btn_numD.clicked.connect(self.btn_numD_clicked)
		self.ui.btn_numE.clicked.connect(self.btn_numE_clicked)
		self.ui.btn_numF.clicked.connect(self.btn_numF_clicked)
		# 加减乘除按钮单击事件信号槽 + - ÷ ×
		self.ui.btn_add_3.clicked.connect(self.btn_add_3_clicked)
		self.ui.btn_sub_3.clicked.connect(self.btn_sub_3_clicked)
		self.ui.btn_ride_3.clicked.connect(self.btn_ride_3_clicked)
		self.ui.btn_div_3.clicked.connect(self.btn_div_3_clicked)
		# 位运算按钮事件处理函数
		self.ui.btn_bitOpera.clicked.connect(self.btn_bitOpera_clicked)
		self.ui.btn_bitAnd.clicked.connect(self.btn_bitAnd_clicked)
		self.ui.btn_bitOr.clicked.connect(self.btn_bitOr_clicked)
		self.ui.btn_bitXor.clicked.connect(self.btn_bitXor_clicked)
		self.ui.btn_bitNot.clicked.connect(self.btn_bitNot_clicked)
		self.ui.btn_bitLeft.clicked.connect(self.btn_bitLeft_clicked)
		self.ui.btn_bitRight.clicked.connect(self.btn_bitRight_clicked)

		# 设置退格按钮的按钮图标
		self.ui.btn_backspace_3.setIcon(QtGui.QIcon("Own_Folder/img/backspace.png"))

	def edit_exp_textChanged(self):
		if not self.is_equ_switch:
			# 如果表达式区单行文本框结尾出现字符'='则去掉
			if len(self.ui.edit_exp.text()) >0 and self.ui.edit_exp.text().find('='):
				temp_str = self.ui.edit_exp.text().replace('=', '')
				self.ui.edit_exp.setText(temp_str)
			self.is_equ_switch = True   # True 显示等号

	def radio_m1_clicked(self):
		self.ui.labelMvalue.setText("M1: " + str(self.m1))
		self.mState = "M1"

	def radio_m2_clicked(self):
		self.ui.labelMvalue.setText("M2: " + str(self.m2))
		self.mState = "M2"

	def radio_m3_clicked(self):
		self.ui.labelMvalue.setText("M3: " + str(self.m3))
		self.mState = "M3"

	def btn_sin_clicked(self):
		if self.ui.lab_switch.text() == "SW":
			self.ui.edit_exp.insert("sinh(")
			self.ui.lab_info_2.setText("返回 x 的反双曲正弦值 例:sinh(1)")
		else:
			self.ui.edit_exp.insert("sin(")
			self.ui.lab_info_2.setText("返回 x 弧度的正弦值 例:sin(1)")

	def btn_cos_clicked(self):
		if self.ui.lab_switch.text() == "SW":
			self.ui.edit_exp.insert("cosh(")
			self.ui.lab_info_2.setText("返回 x 的双曲余弦值 例:cosh(1)")
		else:
			self.ui.edit_exp.insert("cos(")
			self.ui.lab_info_2.setText("返回 x 弧度的余弦值 例:cosh(1)")

	def btn_tan_clicked(self):
		if self.ui.lab_switch.text() == "SW":
			self.ui.edit_exp.insert("tanh(")
			self.ui.lab_info_2.setText("返回 x 的双曲正切值 例:tanh(1)")
		else:
			self.ui.edit_exp.insert("tan(")
			self.ui.lab_info_2.setText("返回 x 弧度的正切值 例:tan(1)")

	def btn_1divX_clicked(self):
		self.ui.edit_exp.insert('DS(')
		self.ui.lab_info_2.setText("返回 x 的例数 例:DS(2) = 1/2 = 0.5")

	def btn_radians_clicked(self):
		if self.ui.lab_switch.text() == "SW":
			self.ui.edit_exp.insert("CirCum(")
			self.ui.lab_info_2.setText("求半径为r圆的周长 例:CirCum(1) = 6.28...")
		else:
			self.ui.edit_exp.insert("rad(")
			self.ui.lab_info_2.setText("将角度 x 从度数转换为弧度")

	def btn_ln_clicked(self):
		if self.ui.lab_switch.text() == "SW":
			self.ui.edit_exp.insert("CirArea(")
			self.ui.lab_info_2.setText("求半径为r圆的面积 例:CirArea(1) = 3.14159...")
		else:
			self.ui.edit_exp.insert("ln(")
			self.ui.lab_info_2.setText("返回 x 的自然对数(底为e) 例:ln(2.71828)=0.99999...")

	def btn_log_clicked(self):
		if self.ui.lab_switch.text() == "SW":
			self.ui.edit_exp.insert("rand(")
			self.ui.lab_info_2.setText("定长随机数字字符")
		else:
			self.ui.edit_exp.insert("log(")
			self.ui.lab_info_2.setText("返回 x 底为10或2的对数 例:log(100) = 2(默认底数为10),log(9,2)底数为2")

	def btn_factorial_clicked(self):
		if self.ui.lab_switch.text() == "SW":
			self.ui.edit_exp.insert("ballVol(")
			self.ui.lab_info_2.setText("返回半径为R的球的体积[(3/4)*π*r^3) 例:ballVol(2)=18.849...")
		else:
			self.ui.edit_exp.insert("fac(")
			self.ui.lab_info_2.setText("返回 整数x 的阶乘 例:fac(5) = 120 参数必须为正整数")

	def btn_pi_clicked(self):
		if self.ui.lab_switch.text() == "SW":
			self.ui.edit_exp.insert("ZhengBi(")
			self.ui.lab_info_2.setText("返回正比例的尾值 例:16:9 = 160:尾值")
		else:
			self.ui.edit_exp.insert("pi")
			self.ui.lab_info_2.setText("圆周率=3.141592653589793")

	def btn_ave_clicked(self):
		if self.ui.lab_switch.text() == "SW":
			self.ui.edit_exp.insert("minGBS(")
			self.ui.lab_info_2.setText("求两个整数的最小公倍数 例:minGBS(6,3)=6")
		else:
			self.ui.edit_exp.insert("ave(")
			self.ui.lab_info_2.setText("输入的参数求平均值 例:ave(6,7,8)=7 注:参数必须是数字")

	def btn_ex_clicked(self):
		if self.ui.lab_switch.text() == "SW":
			self.ui.edit_exp.insert("Helen(")
			self.ui.lab_info_2.setText("用海伦公式求三角形面积 例: Helen(3,4,5)=6.0")
		else:
			self.ui.edit_exp.insert("exp(")
			self.ui.lab_info_2.setText("返回 自然数e 次 x 幂 注:x的默认值是1,exp(1) == exp()")

	def btn_square_clicked(self):
		if self.ui.lab_switch.text() == "SW":
			self.ui.edit_exp.insert("DengCha(")
			self.ui.lab_info_2.setText("等差数列求和 例:DengChar(a:首项, n:项数, step:公差)")
		else:
			self.ui.edit_exp.insert("mod(")
			self.ui.lab_info_2.setText("求两数相除的余数 例:mod(10,3)=1")

	def btn_Nsquare_clicked(self):
		if self.ui.lab_switch.text() == "SW":
			self.ui.edit_exp.insert("crownVol(")
			self.ui.lab_info_2.setText("球冠体积 参数释义:crownVol(x:底面圆半径,y:高度)")
		else:
			self.ui.edit_exp.insert("Nsqrt(")
			self.ui.lab_info_2.setText("返回 x 的n方根 (y的默认值是2,即默认开方,可简写成Nsqrt(x)等同Nsqrt(x,2)")

	def btn_sum_clicked(self):
		if self.ui.lab_switch.text() == "SW":
			self.ui.edit_exp.insert("maxGYS(")
			self.ui.lab_info_2.setText("求两个整数的最大公约数 例:maxGYS(6,3)=3")
		else:
			self.ui.edit_exp.insert("sum(")
			self.ui.lab_info_2.setText("对输入的参数求和 例:sum(8,9,10)=27 注:参数必须是数字")

	def btn_xy_clicked(self):
		if self.ui.lab_switch.text() == "SW":
			self.ui.edit_exp.insert("trgbevel(")
			self.ui.lab_info_2.setText("用余弦定理计算三角形斜边")
		else:
			self.ui.edit_exp.insert("pow(")
			self.ui.lab_info_2.setText("返回 x 的 y 次幂 注:如忽略第二个参数则默认求2次幂,如pow(2)=2^2=4")

	def btn_douhao_clicked(self):
		''' 逗号按键,用于公公参数的分隔 '''
		self.ui.edit_exp.insert(",")

	def btn_OnOff_clicked(self):
		if len(self.ui.lab_switch.text()) == 0:
			self.ui.btn_OnOff.setIcon(QtGui.QIcon("Own_Folder/img/on.png"))
			#self.ui.btn_OnOff.setText(">OFF")

			#按钮新添功能 赋于按钮文字新值
			self.ui.btn_sin.setText("sinh")
			self.ui.btn_cos.setText("cosh")
			self.ui.btn_tan.setText("tanh")
			self.ui.btn_radians.setText("")
			self.ui.btn_radians.setIcon(QtGui.QIcon("Own_Folder/img/cirCum.png"))
			self.ui.btn_ln.setText("")
			self.ui.btn_ln.setIcon(QtGui.QIcon("Own_Folder/img/cirArea.png"))
			self.ui.btn_log.setText("")
			self.ui.btn_log.setIcon(QtGui.QIcon("Own_Folder/img/rand.png"))
			self.ui.btn_factorial.setText("")
			self.ui.btn_factorial.setIcon(QtGui.QIcon("Own_Folder/img/qiu.png"))
			self.ui.btn_pi.setText("")
			self.ui.btn_pi.setIcon(QtGui.QIcon("Own_Folder/img/bili.png"))
			self.ui.btn_ave.setText("")
			self.ui.btn_ave.setIcon(QtGui.QIcon("Own_Folder/img/minVal.png"))
			self.ui.btn_ex.setText("")
			self.ui.btn_ex.setIcon(QtGui.QIcon("Own_Folder/img/sanjiao_area.png"))
			self.ui.btn_square.setText("")
			self.ui.btn_square.setIcon(QtGui.QIcon("Own_Folder/img/dengca_sum.png"))
			self.ui.btn_Nsquare.setText("")
			self.ui.btn_Nsquare.setIcon(QtGui.QIcon("Own_Folder/img/qiuguang.png"))
			self.ui.btn_sum.setText("")
			self.ui.btn_sum.setIcon(QtGui.QIcon("Own_Folder/img/maxVal.png"))
			self.ui.btn_xy.setText("")
			self.ui.btn_xy.setIcon(QtGui.QIcon("Own_Folder/img/xiebian.png"))

			# 新添功能 开启标志启用
			self.ui.lab_switch.setText("SW")
		else:
			self.ui.btn_OnOff.setIcon(QtGui.QIcon("Own_Folder/img/off.png"))

			#按钮按原有功能 赋于按钮文字原来默认值
			self.ui.btn_sin.setText("sin")
			self.ui.btn_cos.setText("cos")
			self.ui.btn_tan.setText("tan")
			self.ui.btn_radians.setIcon(QtGui.QIcon())
			self.ui.btn_radians.setText("rad")
			self.ui.btn_ln.setIcon(QtGui.QIcon())
			self.ui.btn_ln.setText("ln")
			self.ui.btn_log.setIcon(QtGui.QIcon())
			self.ui.btn_log.setText("log")
			self.ui.btn_factorial.setIcon(QtGui.QIcon())
			self.ui.btn_factorial.setText("x!")
			self.ui.btn_pi.setIcon(QtGui.QIcon())
			self.ui.btn_pi.setText("π")
			self.ui.btn_ave.setIcon(QtGui.QIcon())
			self.ui.btn_ave.setText("ave")
			self.ui.btn_ex.setText("")
			self.ui.btn_ex.setIcon(QtGui.QIcon("Own_Folder/img/ex.png"))
			self.ui.btn_square.setIcon(QtGui.QIcon())
			self.ui.btn_square.setText("mod")
			self.ui.btn_Nsquare.setText("")
			self.ui.btn_Nsquare.setIcon(QtGui.QIcon("Own_Folder/img/NRoot.png"))
			self.ui.btn_sum.setIcon(QtGui.QIcon())
			self.ui.btn_sum.setText("sum")
			self.ui.btn_xy.setText("")
			self.ui.btn_xy.setIcon(QtGui.QIcon("Own_Folder/img/xy.png"))

			# 默认功能 清除开启标志
			self.ui.lab_switch.clear()

	def btn_Madd_clicked(self):
		# 判断是否为数字
		try:
			float(self.ui.edit_result.text())
		except ValueError:
			return

		# 先判断当前活动的是哪个缓存,再累加
		if self.mState == "M1":
			self.m1 = self.m1 + float(self.ui.edit_result.text())
			self.ui.labelMvalue.setText("M1: " + str(self.m1))
		elif self.mState == "M2":
			self.m2 = self.m2 + float(self.ui.edit_result.text())
			self.ui.labelMvalue.setText("M2: " + str(self.m2))
		else:
			self.m3 = self.m3 + float(self.ui.edit_result.text())
			self.ui.labelMvalue.setText("M3: " + str(self.m3))

	def btn_Msub_clicked(self):
		# 判断是否为数字
		try:
			float(self.ui.edit_result.text())
		except ValueError:
			return

		# 先判断当前活动的是哪个缓存,再连减
		if self.mState == "M1":
			self.m1 = self.m1 - float(self.ui.edit_result.text())
			self.ui.labelMvalue.setText("M1: " + str(self.m1))
		elif self.mState == "M2":
			self.m2 = self.m2 - float(self.ui.edit_result.text())
			self.ui.labelMvalue.setText("M2: " + str(self.m2))
		else:
			self.m3 = self.m3 - float(self.ui.edit_result.text())
			self.ui.labelMvalue.setText("M3: " + str(self.m3))

	def btn_MR_clicked(self):
		# 先判断当前活动的是哪个缓存,再读取
		if self.mState == "M1":
			self.ui.edit_exp.insert(str(self.m1))
		elif self.mState == "M2":
			self.ui.edit_exp.insert(str(self.m2))
		else:
			self.ui.edit_exp.insert(str(self.m3))

	def btn_MC_clicked(self):
		if self.mState == "M1":
			self.m1 = 0.0
			self.ui.labelMvalue.setText("M1: 0.0")
		elif self.mState == "M2":
			self.m2 = 0.0
			self.ui.labelMvalue.setText("M2: 0.0")
		else:
			self.m3 = 0.0
			self.ui.labelMvalue.setText("M3: 0.0")

	def btn_CE_clicked(self):
		'''
		清除屏幕显示到初始状态,不清除缓存
		'''
		self.ui.edit_exp.clear()
		self.ui.edit_result.clear()
		self.ui.edit_daxie.setText("零")
		self.ui.lab_info_2.setText("显示已清零")
		self._funSelect = ''

	def btn_AC_clicked(self):
		'''
		清除屏幕显示到初始状态,清除所有缓存
		'''
		self.ui.edit_exp.clear()
		self.ui.edit_result.clear()
		self.ui.edit_daxie.setText("零")
		self.m1 = 0.0
		self.m2 = 0.0
		self.m3 = 0.0
		if self.mState == "M1":
			self.ui.labelMvalue.setText("M1: 0.0")
		elif self.mState == "M2":
			self.ui.labelMvalue.setText("M2: 0.0")
		else:
			self.ui.labelMvalue.setText("M3: 0.0")
		self.val_GT = 0.0
		self.ui.lab_info_2.setText("所在缓存和显示已清零")

	def btn_backspace_clicked(self):
		self.ui.edit_exp.backspace()

	def btn_per_clicked(self):
		self.ui.edit_exp.insert("%")
		self.ui.lab_info_2.setText("百分数")

	def btn_GT_clicked(self):
		self.btn_equ_clicked()
		# 判断是否为数字
		try:
			gt_temp = float(self.ui.edit_result.text())
			self.val_GT = self.val_GT + gt_temp
			self.ui.lab_info_2.setText("GT:{}".format(self.val_GT))
		except ValueError:
			self.ui.lab_info_2.setText("注意:GT累计失败")
			return

	def btn_equ_clicked(self):
		self.is_equ_switch = True # 是否进入运算的开关 True表示进入
		temp_str = self.rightBracked_check(self.ui.edit_exp.text())  #提示补全右括号
		self.ui.edit_exp.setText(temp_str) #同步结果
		formula = textFilter(temp_str) #字符串替换,以便给eval函数运算
		#print(formula)
		#self.ui.edit_exp.insert("=")

		isChangToDaxie = False

		try:
			result = eval(formula)
			#print("result:",result)
			self.ui.edit_result.setText(str(result))

			self.ui.lab_info_2.setText("计算结果:")

			if str(result).find('Err') == -1:
				isChangToDaxie = True
			else:
				isChangToDaxie = False

			#print(isChangToDaxie)

		except BaseException:
			self.ui.lab_info_2.setText("计算结果错误!")
			self.ui.edit_result.setText("Err")
			self.ui.edit_daxie.clear()

			isChangToDaxie = False

		# 计算结果转大写
		if isChangToDaxie:
			self.ui.edit_daxie.setText(cncurrency(str(result)))
		else:
			self.ui.edit_daxie.clear()

		self.is_equ_switch = False  # 是否进入运算的开关 False表示退出运算函数

	def btn_num0_clicked(self):
		self.ui.edit_exp.insert("0")

	def btn_num1_clicked(self):
		self.ui.edit_exp.insert("1")

	def btn_num2_clicked(self):
		self.ui.edit_exp.insert("2")

	def btn_num3_clicked(self):
		self.ui.edit_exp.insert("3")

	def btn_num4_clicked(self):
		self.ui.edit_exp.insert("4")

	def btn_num5_clicked(self):
		self.ui.edit_exp.insert("5")

	def btn_num6_clicked(self):
		self.ui.edit_exp.insert("6")

	def btn_num7_clicked(self):
		self.ui.edit_exp.insert("7")

	def btn_num8_clicked(self):
		self.ui.edit_exp.insert("8")

	def btn_num9_clicked(self):
		self.ui.edit_exp.insert("9")

	def btn_numDot_clicked(self):
		self.ui.edit_exp.insert(".")

	def btn_leftBracked_clicked(self):
		self.ui.edit_exp.insert("(")

	def btn_rightBracked_clicked(self):
		self.ui.edit_exp.insert(")")

	def btn_add_clicked(self):  # + - ÷ ×
		temp_str = self.rightBracked_check(self.ui.edit_exp.text())  # 提示补全右括号
		self.ui.edit_exp.setText(temp_str)  # 同步结果
		self.ui.edit_exp.insert("+")
		self.ui.lab_info_2.setText("加")

	def btn_sub_clicked(self):
		temp_str = self.rightBracked_check(self.ui.edit_exp.text())  # 提示补全右括号
		self.ui.edit_exp.setText(temp_str)  # 同步结果
		self.ui.edit_exp.insert("-")
		self.ui.lab_info_2.setText("减/负号")

	def btn_ride_clicked(self):
		temp_str = self.rightBracked_check(self.ui.edit_exp.text())  # 提示补全右括号
		self.ui.edit_exp.setText(temp_str)  # 同步结果
		self.ui.edit_exp.insert("×")
		self.ui.lab_info_2.setText("乘")

	def btn_div_clicked(self):
		temp_str = self.rightBracked_check(self.ui.edit_exp.text())  # 提示补全右括号
		self.ui.edit_exp.setText(temp_str)  # 同步结果
		self.ui.edit_exp.insert("÷")
		self.ui.lab_info_2.setText("除")

	def update_time(self):
		time = QDateTime.currentDateTime()
		timeplay = time.toString("yyyy-MM-dd hh:mm dddd")
		self.ui.lab_info_1.setText(timeplay)

	def log(self, x, y=10):
		if y == 10:
			return math.log10(x)
		else:
			return math.log2(x)

	def DS(self,x):
		''' 求倒数 1/x  参数须是数字,且不能为零'''
		# 判断是否为数字
		try:
			float(x)
			if math.fabs(float(x) - 0) < 0.000001:
				QMessageBox.warning(self.ui,"参数错误", "参数不能为零")
				return 'Err'
			return 1 / x
		except ValueError:
			QMessageBox.warning(self.ui, "参数错误", "参数不是数字")
			return 'Err'

	def CirCum(self, x):
		"""
		==圆周长==
		:param x: 圆的半径
		:return: 圆的周长
		"""
		try:
			float(x)
			return math.pi * 2 * x
		except ValueError:
			return "Err_00"

	def CirArea(self, x):
		"""
		==圆面积==
		:param x: 圆的半径
		:return: 圆的面积
		"""
		try:
			float(x)
			return math.pi * x * x
		except ValueError:
			return "Err_01"

	def rand(self, x):
		"""
		==指定长度的随机数==
		:param x:指定随机数长度(位数)
		:return:随机数
		"""

		if not isinstance(x, int):
			return "Err"

		if int(x) == 0 or int(x) < 0:
			return 'Err'

		x_bit_list = []
		for i in range(x):
			if i == 0:
				x_bit_list.append(str(random.randint(1, 9)))
			else:
				x_bit_list.append(str(random.randint(0, 9)))

		return ''.join(x_bit_list)

	def ballVol(self, x):
		"""
		==球的体积 V=(4/3)πR³==
		:param x: 球的半径
		:return: 球的体积
		"""
		try:
			float(x)
		except ValueError:
			return "Err_03"

		return 4 / 3 * math.pi * math.pow(x, 3)

	def ZhengBi(self, a, b, c):
		"""
		==正比例尾值==
		:param a:正比例左边第一个值
		:param b:正比例右边第一个值
		:param c:正比例另一个值
		:return:
		"""
		return b * c / a

	def trgbevel(self, a, b, r):
		"""
		==用余弦定理求三角形的斜边==
		:param a: 三角形边a
		:param b: 三角形边b
		:param r: a和b的夹角
		:return: 三角形的斜边长
		"""
		# c^2 = a^2+b^2-2abcoa<ab
		c2 = a ** 2 + b ** 2 - 2 * a * b * math.cos(math.radians(r))
		return math.sqrt(c2)

	def Helen(self, a, b, c):
		"""
		==用海伦公式求三角形的面积==
		:param a: 三角形边长1
		:param b: 三角形边长2
		:param c: 三角形边长3
		:return: 三角形的面积
		"""
		try:
			float(a)
		except ValueError:
			return "Err"

		try:
			float(b)
		except ValueError:
			return "Err"

		try:
			float(c)
		except ValueError:
			return "Err"
		"""
		三角形面积
		海伦公式:只要已知三角形的三条边长,就可以求三角形的面积.
		公式:若已知三角形的三条边长分别为a、b、c,S=根号下p(p-a)(p-b)(p-c)
		(p为三角形周长的一半,即p=1/2(a+b+c))
		"""
		p = (a + b + c) / 2
		pp = p * (p - a) * (p - b) * (p - c)
		return math.sqrt(pp)

	def crownVol(self, x, y):
		""" 球冠体积
		"""
		v_par = math.pow(y,2)+3*math.pow(x,2)
		return 1 / 6 * math.pi * y * v_par

	def DengCha(self, a1, n, step):
		"""
		== 等差数列求和 ==
		:param a1: 等差数列首项
		:param n: 等差数列项数
		:param step: 公差
		:return: 等差数列求和
		"""
		# Sn = n(a1 + an) / 2
		an = a1 + (n - 1) * step
		return n * (a1 + an) / 2

	def maxGYS(self, x, y):
		return math.gcd(x, y)

	def minGBS(self, x, y):
		gcd = math.gcd(x, y)
		return x * y / gcd

	def pow(self,x, y=2):
		""" 返回 x 的 y 次幂 (y的默认值是2) """
		return math.pow(x, y)

	def exp(self, x=1):
		"""自然数的 x 次幂 (x的默认值是1,则返回e自然对数)"""
		return math.exp(x)

	def Nsqrt(self, x, y=2):
		""" 返回 x 的n方根 (y的默认值是2) """
		return math.pow(x, 1 / y)

	def sum(self, *part):
		""" 多项参数求和 """
		total = 0
		for item in part:
			total = total + item
		return total

	def average(self, *part):
		""" 对输入的参数求平均值 """
		total = 0
		for item in part:
			total = total + item
		return total / len(part)

	def rightBracked_check(self, str1):
		''' 检查右括号是否补全 '''
		leftB = str1.count('(')
		rightB = str1.count(')')
		if leftB > rightB:
			choice = QMessageBox.question(self.ui,
			                              "补全括号",
			                              "右括号未补全,是否补全?")
			if choice == QMessageBox.Yes:
				temp_str = ')' * (leftB-rightB)
				return str1+temp_str
		return str1

	#第二屏,特殊专业型数字按键
	def btn_fuHao_clicked(self):
		self.ui.edit_exp.insert('-')

	def btn_12FangCheng_clicked(self):
		self.ui.lab_info_2.clear()
		self.ui.edit_exp.clear()
		self.ui.lab_info_2.setText("求一元二次(ax^2+bx+c=0 a!=0)方程的解:输入3个参数a,b,c的值(逗号分隔,回车结束)")
		self._funSelect = '12FangCheng'

	def btn_XibianXing_clicked(self):
		self.ui.lab_info_2.clear()
		self.ui.edit_exp.clear()
		self.ui.lab_info_2.setText("求凸四边形面积:输入m,n,a的值(逗号分隔,回车结束) 注:m、n是对角线长度,a为夹角")
		self._funSelect = 'XibianXing'

	def btn_ballSurfaceArea_clicked(self):
		self.ui.lab_info_2.clear()
		self.ui.edit_exp.clear()
		self.ui.lab_info_2.setText("求球体表面积:输入1个参数:半径(逗号分隔,回车结束)")
		self._funSelect = 'ballSurfaceArea'

	def btn_torusVol_clicded(self):
		self.ui.lab_info_2.clear()
		self.ui.edit_exp.clear()
		self.ui.lab_info_2.setText("求立体圆环圈体积:输入2个参数:外环直径,内环直径(逗号分隔,回车结束)")
		self._funSelect = 'torusVol'

	def btn_CylinderVol_clicked(self):
		self.ui.lab_info_2.clear()
		self.ui.edit_exp.clear()
		self.ui.lab_info_2.setText("求圆柱的体积:输入2个参数:周长,高度值(逗号分隔,回车结束)")
		self._funSelect = 'CylinderVol'

	def btn_CylinderArea_clicked(self):
		self.ui.lab_info_2.clear()
		self.ui.edit_exp.clear()
		self.ui.lab_info_2.setText("求圆柱的表面积:输入2个参数:周长,高度值(逗号分隔,回车结束)")
		self._funSelect = 'CylinderArea'

	def btn_conicalVol_clicked(self):
		self.ui.lab_info_2.clear()
		self.ui.edit_exp.clear()
		self.ui.lab_info_2.setText("求圆锥体积:输入2个参数:周长,高度值(逗号分隔,回车结束)")
		self._funSelect = 'conicalVol'

	def btn_conicalSurfaceArea_clicked(self):
		self.ui.lab_info_2.clear()
		self.ui.edit_exp.clear()
		self.ui.lab_info_2.setText("求圆锥表面积:输入2个参数:底面直径,母线-顶点到底面圆周的距离(逗号分隔,回车结束)")
		self._funSelect = 'conicalSurfaceArea'

	def btn_Npolygon_clicked(self):
		self.ui.lab_info_2.clear()
		self.ui.edit_exp.clear()
		self.ui.lab_info_2.setText("N边正多边形面积:输入2个参数:外接圆直径,边数(逗号分隔,回车结束)")
		self._funSelect = 'Npolygon'

	def btn_trgAngleline_clicked(self):
		self.ui.lab_info_2.clear()
		self.ui.edit_exp.clear()
		self.ui.lab_info_2.setText("三角形之边长a对面角平分线长度:输入3个参数:边长a,边长b,边长c(逗号分隔,回车结束)")
		self._funSelect = 'trgAngleline'

	def btn_triangularCenterline_clicked(self):
		self.ui.lab_info_2.clear()
		self.ui.edit_exp.clear()
		self.ui.lab_info_2.setText("三角形之边长a的中线:输入3个参数:边长a,边长b,边长c(逗号分隔,回车结束)")
		self._funSelect = 'triangularCenterline'

	def btn_numAzRandom_clicked(self):
		self.ui.lab_info_2.clear()
		self.ui.edit_exp.clear()
		self.ui.lab_info_2.setText("数字字母混合随机数:输入1个参数:位数(逗号分隔,回车结束)")
		self._funSelect = 'numAzRandom'

	def btn_dengFengCut_clicked(self):
		self.ui.lab_info_2.clear()
		self.ui.edit_exp.clear()
		self.ui.lab_info_2.setText("等分裁图计算:输入3个参数:长度,份数,重合尺寸(逗号分隔,回车结束)")
		self._funSelect = 'dengFengCut'

	def btn_chaFengCut_clicked(self):
		self.ui.lab_info_2.clear()
		self.ui.edit_exp.clear()
		self.ui.lab_info_2.setText("差分裁图(最后一份不同):输入4个参数:长度,份数,重合尺寸,前定量尺寸(逗号分隔,回车结束)")
		self._funSelect = 'chaFengCut'

	def btn_guoShuiDian1_clicked(self):
		self.ui.lab_info_2.clear()
		self.ui.edit_exp.clear()
		self.ui.lab_info_2.setText(" —输入税点查结余:输入3个参数:本金,收客户税点,国税定点(逗号分隔,回车结束)")
		self._funSelect = 'guoShuiDian1'

	def btn_guoShuiDian2_clicked(self):
		self.ui.lab_info_2.clear()
		self.ui.edit_exp.clear()
		self.ui.lab_info_2.setText(" —-输入结余查定税点:输入3个参数:给余,本金,国税定点(逗号分隔,回车结束)")
		self._funSelect = 'guoShuiDian2'

	def btn_enter_clicked(self):
		if self._funSelect == '':
			QMessageBox.warning(self.ui, "操作流程错误", "请先选择左边的功能按钮")
			return

		temp_str = self.ui.edit_exp.text()
		if len(temp_str) > 0:
			if self._funSelect == '12FangCheng':
				self.ui.edit_result.setText(self.jieFangCheng(temp_str))
			elif self._funSelect == 'XibianXing':
				self.ui.edit_result.setText(self.tuXibianXingArea(temp_str))
			elif self._funSelect == 'CylinderVol':
				self.ui.edit_result.setText(self.cylinderVol(temp_str))
			elif self._funSelect == 'CylinderArea':
				self.ui.edit_result.setText(self.cylinderArea(temp_str))
			elif self._funSelect == 'ballSurfaceArea':
				self.ui.edit_result.setText(self.ballSurfaceArea(temp_str))
			elif self._funSelect == 'torusVol':
				self.ui.edit_result.setText(self.torusVol(temp_str))
			elif self._funSelect == 'conicalVol':
				self.ui.edit_result.setText(self.conicalVol(temp_str))
			elif self._funSelect == 'conicalSurfaceArea':
				self.ui.edit_result.setText(self.conicalSurfaceArea(temp_str))
			elif self._funSelect == 'Npolygon':
				self.ui.edit_result.setText(self.Npolygon(temp_str))
			elif self._funSelect == 'trgAngleline':
				self.ui.edit_result.setText(self.trgAngleline(temp_str))
			elif self._funSelect == 'triangularCenterline':
				self.ui.edit_result.setText(self.triangularCenterline(temp_str))
			elif self._funSelect == 'numAzRandom':
				self.ui.edit_result.setText(self.numAzRandom(temp_str))
			elif self._funSelect == 'dengFengCut':
				self.ui.edit_result.setText(self.dengFengCut(temp_str))
			elif self._funSelect == 'chaFengCut':
				self.ui.edit_result.setText(self.chaFengCut(temp_str))
			elif self._funSelect == 'guoShuiDian1':
				self.ui.edit_result.setText(self.guoShuiDian1(temp_str))
			else:
				self.ui.edit_result.setText(self.guoShuiDian2(temp_str))
		else:
			QMessageBox.warning(self.ui, "输入错误", "未检测到任何输入")
			return

	def jieFangCheng(self, par_str):
		''' 求一元二次方程的解 ax^2+bx+c '''
		strList = par_str.split(',')
		if len(strList) != 3:
			QMessageBox.warning(self.ui, "参数错误", "参数个数不对")
			return 'Err'

		for i in strList:
			# 判断是否为数字
			try:
				float(i)
			except ValueError:
				QMessageBox.warning(self.ui, "参数错误", "参数中存在不是数字的参数")
				return 'Err'

		if math.fabs(float(strList[0]) - 0) < 0.000001:
			QMessageBox.warning(self.ui,"参数错误", "参数a不能为零")
			return 'Err'
		#self.ui.edit_result.setText("解方程了")
		a = float(strList[0])
		b = float(strList[1])
		c = float(strList[2])
		dt = b * b - 4 * a * c
		if dt > 0:
			x1 = (0 - b + math.sqrt(dt)) / (2 * a)
			x2 = (0 - b - math.sqrt(dt)) / (2 * a)
			return "两个根:x1={} x2={}".format(round(x1,4),round(x2,4))
		elif dt == 0:
			x = (0-b)/(2*a)
			return '只有一个根:x={}'.format(round(x,4))
		else:
			return '无实数根'

	def tuXibianXingArea(self,par_str):
		""" 凸四边形面积 """
		strList = par_str.split(',')
		if len(strList) != 3:
			QMessageBox.warning(self.ui, "参数错误", "参数个数不对")
			return 'Err'

		for i in strList:
			# 判断是否为数字
			try:
				float(i)
			except ValueError:
				QMessageBox.warning(self.ui, "参数错误", "参数中存在不是数字的参数")
				return 'Err'

		m = float(strList[0])
		n = float(strList[1])
		a = float(strList[2])

		if math.fabs(m - 0) < 0.000001 or m < 0:
			QMessageBox.warning(self.ui,"参数错误", "参数m必须大于零")
			return 'Err'
		if math.fabs(n - 0) < 0.000001 or n < 0:
			QMessageBox.warning(self.ui,"参数错误", "参数n必须大于零")
			return 'Err'
		if math.fabs(a - 0) < 0.000001 or a < 0:
			QMessageBox.warning(self.ui,"参数错误", "参数a必须大于零")
			return 'Err'
		#四边形面积 s = 1/2 * m * n *sin(a)
		return str( 0.5 * m * n * math.sin(math.radians(a)) )

	def ballSurfaceArea(self,par_str):
		''' 球的表面积 '''
		# s=4*pi*r^2
		# 判断是否为数字
		try:
			float(par_str)
		except ValueError:
			QMessageBox.warning(self.ui, "参数错误", "参数不是数字类型")
			return 'Err'
		r = float(par_str)
		if math.fabs(r - 0) < 0.000001 or r < 0:
			QMessageBox.warning(self.ui, "参数错误", "参数r必须大于零")
			return 'Err'
		return str(4 * math.pi * r**2)

	def torusVol(self,par_str):
		''' 圆环体积 '''
		# v = pi ^2 * D * d^2 / 4
		strList = par_str.split(',')
		if len(strList) != 2:
			QMessageBox.warning(self.ui, "参数错误", "参数个数不对")
			return 'Err'

		for i in strList:
			# 判断是否为数字
			try:
				float(i)
			except ValueError:
				QMessageBox.warning(self.ui, "参数错误", "参数中存在不是数字的参数")
				return 'Err'

		par1 = float(strList[0])
		par2 = float(strList[1])

		if math.fabs(par1 - 0) < 0.000001 or par1 < 0:
			QMessageBox.warning(self.ui,"参数错误", "参数必须大于零")
			return 'Err'
		if math.fabs(par2 - 0) < 0.000001 or par2 < 0:
			QMessageBox.warning(self.ui,"参数错误", "参数必须大于零")
			return 'Err'
		if par1 < par2:
			QMessageBox.warning(self.ui,"参数错误", "外环直径必须大于内环直径")
			return 'Err'
		# v = pi ^2 * D * d^2 / 4
		d = (par1 - par2) / 2
		D = par2 + d
		v = (math.pow(math.pi,2) * D * d * d) / 4
		return str(v)


	def conicalVol(self,par_str):
		''' 圆锥体积 '''
		strList = par_str.split(',')
		if len(strList) != 2:
			QMessageBox.warning(self.ui, "参数错误", "参数个数不对")
			return 'Err'

		for i in strList:
			# 判断是否为数字
			try:
				float(i)
			except ValueError:
				QMessageBox.warning(self.ui, "参数错误", "参数中存在不是数字的参数")
				return 'Err'

		par1 = float(strList[0])
		par2 = float(strList[1])

		if math.fabs(par1 - 0) < 0.000001 or par1 < 0:
			QMessageBox.warning(self.ui, "参数错误", "周长参数必须大于零")
			return 'Err'
		if math.fabs(par2 - 0) < 0.000001 or par2 < 0:
			QMessageBox.warning(self.ui, "参数错误", "高度参数必须大于零")
			return 'Err'
		c = par1
		s = math.pow(c, 2) / (4 * math.pi)
		h = par2
		return str(s * h / 3)

	def conicalSurfaceArea(self,par_str):
		''' 圆锥表面积 '''
		strList = par_str.split(',')
		if len(strList) != 2:
			QMessageBox.warning(self.ui, "参数错误", "参数个数不对")
			return 'Err'

		for i in strList:
			# 判断是否为数字
			try:
				float(i)
			except ValueError:
				QMessageBox.warning(self.ui, "参数错误", "参数中存在不是数字的参数")
				return 'Err'

		par1 = float(strList[0])
		par2 = float(strList[1])
		r = par1 / math.pi / 2

		if math.fabs(par1 - 0) < 0.000001 or par1 < 0:
			QMessageBox.warning(self.ui, "参数错误", "周长参数必须大于零")
			return 'Err'
		if math.fabs(par2 - 0) < 0.000001 or float(strList[1]) < r:
			QMessageBox.warning(self.ui, "参数错误", "母线长度参数必须大于零且大于底面半径")
			return 'Err'
		# S=πr²+πrl
		s = math.pow(par1, 2) / (4 * math.pi)
		return str(s + math.pi * r * par2)

	def Npolygon(self,par_str):
		''' N边正多边形面积 '''
		strList = par_str.split(',')
		if len(strList) != 2:
			QMessageBox.warning(self.ui, "参数错误", "参数个数不对")
			return 'Err'

		for i in strList:
			# 判断是否为数字
			try:
				float(i)
			except ValueError:
				QMessageBox.warning(self.ui, "参数错误", "参数中存在不是数字的参数")
				return 'Err'

		D = float(strList[0])
		if math.fabs(D - 0) < 0.000001 or D < 0:
			QMessageBox.warning(self.ui, "参数错误", "直径参数必须大于零")
			return 'Err'

		N = float(strList[1])
		if N.is_integer() and str(strList[1]).count('.') == 0 and int(N) > 3:
			N = int(strList[1])
		else:
			QMessageBox.warning(self.ui, "参数错误", "正多边形边数必须是正整数且大于3")
			return 'Err'
		# 角度2pi/n   R^2 * N sin(ji) * 0.5
		a = 2 * math.pi / N
		R = D / 2
		Area = R * R * N * math.sin(a) * 0.5
		return str(Area)

	def trgAngleline(self,par_str):
		''' 三角形a边对角的角平分线 '''
		strList = par_str.split(',')
		if len(strList) != 3:
			QMessageBox.warning(self.ui, "参数错误", "参数个数不对")
			return 'Err'

		for i in strList:
			# 判断是否为数字
			try:
				float(i)
			except ValueError:
				QMessageBox.warning(self.ui, "参数错误", "参数中存在不是数字的参数")
				return 'Err'

		a = float(strList[0])
		b = float(strList[1])
		c = float(strList[2])

		if math.fabs(a - 0) < 0.000001 or a < 0:
			QMessageBox.warning(self.ui, "参数错误", "边长参数a必须大于零")
			return 'Err'
		if math.fabs(b - 0) < 0.000001 or b < 0:
			QMessageBox.warning(self.ui, "参数错误", "边长参数b必须大于零")
			return 'Err'
		if math.fabs(c - 0) < 0.000001 or c < 0:
			QMessageBox.warning(self.ui, "参数错误", "边长参数c必须大于零")
			return 'Err'
		# s = (a+b+c)/2    A = 2/(b+c) * math.sqrt(b*c*s*(s-a))
		try:
			s = (a + b + c) / 2
			A = 2 / (b + c) * math.sqrt(b * c * s * (s - a))
			return str(A)
		except ValueError:
			QMessageBox.warning(self.ui, "错误", "运算数值异常")
			return 'Err'

	def triangularCenterline(self,par_str):
		''' 三角形中线 '''
		strList = par_str.split(',')
		if len(strList) != 3:
			QMessageBox.warning(self.ui, "参数错误", "参数个数不对")
			return 'Err'

		for i in strList:
			# 判断是否为数字
			try:
				float(i)
			except ValueError:
				QMessageBox.warning(self.ui, "参数错误", "参数中存在不是数字的参数")
				return 'Err'

		a = float(strList[0])
		b = float(strList[1])
		c = float(strList[2])

		if math.fabs(a - 0) < 0.000001 or a < 0:
			QMessageBox.warning(self.ui, "参数错误", "边长参数a必须大于零")
			return 'Err'
		if math.fabs(b - 0) < 0.000001 or b < 0:
			QMessageBox.warning(self.ui, "参数错误", "边长参数b必须大于零")
			return 'Err'
		if math.fabs(c - 0) < 0.000001 or c < 0:
			QMessageBox.warning(self.ui, "参数错误", "边长参数c必须大于零")
			return 'Err'
		#L=0.5 * math.sqrt(2*b^2 + 2*c^2 - a^2)
		try:
			L = 0.5 * math.sqrt(2 * b**2 + 2 * c**2 - a**2)
			return str(L)
		except ValueError:
			QMessageBox.warning(self.ui, "错误", "运算数值异常")
			return 'Err'

	def numAzRandom(self,par_str):
		'''数字字母混合随机数'''
		strList = par_str.split(',')
		if len(strList) != 1:
			QMessageBox.warning(self.ui, "参数错误", "参数个数不对")
			return 'Err'

		x = int(float(par_str))

		#print('numAzRandom',x)

		if x <= 0:
			QMessageBox.warning(self.ui, "参数错误", "参数必须是正整数")
			return 'Err'

		x_bit_list = []

		choice_list = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
		choice_list.extend([chr(i) for i in range(65, 91)])
		choice_list.extend([chr(i) for i in range(97, 123)])
		choice_list.extend(list("~@#$%^&*(<>)_+?!"))
		#print("choice_list",choice_list)
		x_bit_list = random.choices(choice_list,k=x)
		return ''.join(x_bit_list)

	def dengFengCut(self,par_str):
		"""
		==等分接驳裁图==
		:param x: 要分割的画面长度
		:param y: 要分割的份数
		:param z: 接驳时重合的尺寸
		:return: 分割后的画面长度
		"""
		strList = par_str.split(',')
		if len(strList) != 3:
			QMessageBox.warning(self.ui, "参数错误", "参数个数不对")
			return 'Err'

		for i in strList:
			# 判断是否为数字
			try:
				float(i)
			except ValueError:
				QMessageBox.warning(self.ui, "参数错误", "参数中存在不是数字的参数")
				return 'Err'

		a = float(strList[0])
		b = float(strList[1])
		if b.is_integer() and str(strList[1]).count('.') == 0:
			b = int(strList[1])
		else:
			QMessageBox.warning(self.ui, "参数错误", "切分份数必须是整数")
			return 'Err'
		c = float(strList[2])

		if math.fabs(a - 0) < 0.000001 or a < 0:
			QMessageBox.warning(self.ui, "参数错误", "需裁图的画面长度必须大于零")
			return 'Err'
		if b <= 0:
			QMessageBox.warning(self.ui, "参数错误", "切分份数必须是正整数")
			return 'Err'
		if c < 0:
			QMessageBox.warning(self.ui, "参数错误", "重合接驳尺寸必须大于或等于零")
			return 'Err'

		return str((a + (b - 1) * c) / b)

	def chaFengCut(self,par_str):
		''' 差分裁图公式 —裁出的图前几份一样,最后一份不一样'''
		strList = par_str.split(',')
		if len(strList) != 4:
			QMessageBox.warning(self.ui, "参数错误", "参数个数不对")
			return 'Err'

		for i in strList:
			# 判断是否为数字
			try:
				float(i)
			except ValueError:
				QMessageBox.warning(self.ui, "参数错误", "参数中存在不是数字的参数")
				return 'Err'

		a = float(strList[0])
		b = float(strList[1])
		if b.is_integer() and str(strList[1]).count('.') == 0:
			b = int(strList[1])
		else:
			QMessageBox.warning(self.ui, "参数错误", "切分份数必须是整数")
			return 'Err'
		c = float(strList[2])
		d = float(strList[3])

		if math.fabs(a - 0) < 0.000001 or a < 0:
			QMessageBox.warning(self.ui, "参数错误", "需裁图的画面长度必须大于零")
			return 'Err'
		if b <= 0:
			QMessageBox.warning(self.ui, "参数错误", "切分份数必须是正整数")
			return 'Err'
		if c < 0:
			QMessageBox.warning(self.ui, "参数错误", "重合接驳尺寸必须大于或等于零")
			return 'Err'
		if math.fabs(d - 0) < 0.000001 or d < 0:
			QMessageBox.warning(self.ui, "参数错误", "前面定长裁图尺寸必须大于零")
			return 'Err'

		return str((a + (b - 1) * c) - d * (b - 1))

	def guoShuiDian1(self,par_str):
		'''国税定税点1'''
		strList = par_str.split(',')
		if len(strList) != 3:
			QMessageBox.warning(self.ui, "参数错误", "参数个数不对")
			return 'Err'

		for i in strList:
			# 判断是否为数字
			try:
				float(i)
			except ValueError:
				QMessageBox.warning(self.ui, "参数错误", "参数中存在不是数字的参数")
				return 'Err'

		a = float(strList[0])
		b = float(strList[1])
		c = float(strList[2])

		if math.fabs(a - 0) < 0.000001 or a < 0:
			QMessageBox.warning(self.ui, "参数错误", "本金参数必须大于零")
			return 'Err'
		if math.fabs(b - 0) < 0.000001 or b > 100:
			QMessageBox.warning(self.ui, "参数错误", "收客户税点参数必须大于零且小于100")
			return 'Err'
		if math.fabs(c - 0) < 0.000001 or c > 100:
			QMessageBox.warning(self.ui, "参数错误", "国税定点参数必须大于零且小于100")
			return 'Err'
		r=(a*(1+b/100)-a*(1+b/100)*c/100)-a
		return str(r)

	def guoShuiDian2(self,par_str):
		'''国税定税点2'''
		strList = par_str.split(',')
		if len(strList) != 3:
			QMessageBox.warning(self.ui, "参数错误", "参数个数不对")
			return 'Err'

		for i in strList:
			# 判断是否为数字
			try:
				float(i)
			except ValueError:
				QMessageBox.warning(self.ui, "参数错误", "参数中存在不是数字的参数")
				return 'Err'

		a = float(strList[0])
		b = float(strList[1])
		c = float(strList[2])

		if math.fabs(b - 0) < 0.000001 or b < 0:
			QMessageBox.warning(self.ui, "参数错误", "本金参数必须大于零")
			return 'Err'
		if math.fabs(c - 0) < 0.000001 or c > 100:
			QMessageBox.warning(self.ui, "参数错误", "国税定点参数必须大于零且小于100")
			return 'Err'
		r=(100*a+c*b)/(b*(1-0.01*c))
		return str(r)

	def cylinderVol(self,par_str):
		''' 求圆柱的体积 '''
		strList = par_str.split(',')
		if len(strList) != 2:
			QMessageBox.warning(self.ui, "参数错误", "参数个数不对")
			return 'Err'
		else:
			for i in strList:
				# 判断是否为数字
				try:
					float(i)
				except ValueError:
					QMessageBox.warning(self.ui, "参数错误", "参数中存在不是数字的参数")
					return 'Err'

			if math.fabs(float(strList[0]) - 0) < 0.000001 or float(strList[0]) < 0:
				QMessageBox.warning(self.ui,"参数错误", "周长参数必须大于零")
				return 'Err'
			if math.fabs(float(strList[0]) - 0) < 0.000001 or float(strList[1]) < 0:
				QMessageBox.warning(self.ui,"参数错误", "高度参数必须大于零")
				return 'Err'
			c = float(strList[0])
			s = math.pow(c,2) / (4 * math.pi)
			h = float(strList[1])
			return str(s * h)

	def cylinderArea(self,par_str):
		''' 求圆柱的表面积 '''
		strList = par_str.split(',')
		if len(strList) != 2:
			QMessageBox.warning(self.ui, "参数错误", "参数个数不对")
			return 'Err'
		else:
			for i in strList:
				# 判断是否为数字
				try:
					float(i)
				except ValueError:
					QMessageBox.warning(self.ui, "参数错误", "参数中存在不是数字的参数")
					return 'Err'

			if math.fabs(float(strList[0]) - 0) < 0.000001 or float(strList[0]) < 0:
				QMessageBox.warning(self.ui, "参数错误", "周长参数必须大于零")
				return 'Err'
			if math.fabs(float(strList[0]) - 0) < 0.000001 or float(strList[1]) < 0:
				QMessageBox.warning(self.ui, "参数错误", "高度参数必须大于零")
				return 'Err'
			c = float(strList[0])
			s = math.pow(c, 2) / (4 * math.pi)
			h = float(strList[1])
			return str(s + s * h)

	#第三屏相关函数
	def radio_bin_clicked(self):
		self._jinZhiState = 2
		# A-F 9-2按钮先禁用
		self.ui.btn_numA.setEnabled(False)
		self.ui.btn_numB.setEnabled(False)
		self.ui.btn_numC.setEnabled(False)
		self.ui.btn_numD.setEnabled(False)
		self.ui.btn_numE.setEnabled(False)
		self.ui.btn_numF.setEnabled(False)
		self.ui.btn_num8_3.setEnabled(False)
		self.ui.btn_num9_3.setEnabled(False)
		self.ui.btn_num7_3.setEnabled(False)
		self.ui.btn_num6_3.setEnabled(False)
		self.ui.btn_num5_3.setEnabled(False)
		self.ui.btn_num4_3.setEnabled(False)
		self.ui.btn_num3_3.setEnabled(False)
		self.ui.btn_num2_3.setEnabled(False)
		# A-F 9-2按钮褪色
		self.ui.btn_numA.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numB.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numC.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numD.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numE.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numF.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_num8_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_num9_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_num7_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_num6_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_num5_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_num4_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_num3_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_num2_3.setStyleSheet(self._ButtonStyleB)

		# MC M+ M- MR 按键禁用
		self.ui.btn_MC_3.setEnabled(False)
		self.ui.btn_MR_3.setEnabled(False)
		self.ui.btn_Madd_3.setEnabled(False)
		self.ui.btn_Msub_3.setEnabled(False)
		self.ui.btn_MC_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_MR_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_Madd_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_Msub_3.setStyleSheet(self._ButtonStyleB)

		self.ui.edit_exp.clear()   #清除运算区表达式的内容

		if 'Err' in self.ui.edit_result.text():
			return

		if self.ui.edit_result.text() == '':
			return

		if '0x' in self.ui.edit_result.text():
			#把结果从16进制转为二进制
			tem_str = self.ui.edit_result.text()
			nums = bin(int(tem_str, 16))
			self.ui.edit_result.setText(nums)
		elif '0o' in self.ui.edit_result.text():
			# 把结果从8进制转为二进制
			tem_str = self.ui.edit_result.text()
			nums = bin(int(tem_str, 8))
			self.ui.edit_result.setText(nums)
		elif '0b' in self.ui.edit_result.text():
			pass
		else:
			# 把结果从10进制转为二进制
			tem_str = self.ui.edit_result.text()
			nums = bin(int(tem_str))
			self.ui.edit_result.setText(nums)

		self.ui.lab_info_2.setText("{0} 计算结果(二进制显示):".format(self.expAreaString))


	def radio_dec_clicked(self):
		self._jinZhiState = 10
		# A-F 按钮先禁用
		self.ui.btn_numA.setEnabled(False)
		self.ui.btn_numB.setEnabled(False)
		self.ui.btn_numC.setEnabled(False)
		self.ui.btn_numD.setEnabled(False)
		self.ui.btn_numE.setEnabled(False)
		self.ui.btn_numF.setEnabled(False)
		# A-F 按钮先褪色
		self.ui.btn_numA.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numB.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numC.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numD.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numE.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numF.setStyleSheet(self._ButtonStyleB)
		# 2-9按钮先启用
		self.ui.btn_num9_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num8_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num7_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num6_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num5_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num4_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num3_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num2_3.setStyleSheet(self._ButtonStyleA)
		# 2-9按钮色彩还原
		self.ui.btn_num9_3.setEnabled(True)
		self.ui.btn_num8_3.setEnabled(True)
		self.ui.btn_num7_3.setEnabled(True)
		self.ui.btn_num6_3.setEnabled(True)
		self.ui.btn_num5_3.setEnabled(True)
		self.ui.btn_num4_3.setEnabled(True)
		self.ui.btn_num3_3.setEnabled(True)
		self.ui.btn_num2_3.setEnabled(True)

		# MC M+ M- MR 按键启用
		self.ui.btn_MC_3.setEnabled(True)
		self.ui.btn_MR_3.setEnabled(True)
		self.ui.btn_Madd_3.setEnabled(True)
		self.ui.btn_Msub_3.setEnabled(True)
		self.ui.btn_MC_3.setStyleSheet(self._ButtonStyleA2)
		self.ui.btn_MR_3.setStyleSheet(self._ButtonStyleA2)
		self.ui.btn_Madd_3.setStyleSheet(self._ButtonStyleA2)
		self.ui.btn_Msub_3.setStyleSheet(self._ButtonStyleA2)

		self.ui.edit_exp.clear()  # 清除运算区表达式的内容

		if 'Err' in self.ui.edit_result.text():
			return

		if self.ui.edit_result.text() == '':
			return

		if '0x' in self.ui.edit_result.text():
			# 把结果从16进制转为10进制
			tem_str = self.ui.edit_result.text()
			nums = int(tem_str, 16)
			self.ui.edit_result.setText(str(nums))
		elif '0o' in self.ui.edit_result.text():
			# 把结果从8进制转为10进制
			tem_str = self.ui.edit_result.text()
			nums = int(tem_str, 8)
			self.ui.edit_result.setText(str(nums))
		elif '0b' in self.ui.edit_result.text():
			# 把结果从2进制转为10进制
			tem_str = self.ui.edit_result.text()
			nums = int(tem_str, 2)
			self.ui.edit_result.setText(str(nums))
		else:
			# 把结果从10进制转为10进制
			pass

		self.ui.lab_info_2.setText("{0} 计算结果(十进制显示):".format(self.expAreaString))

	def radio_oct_clicked(self):
		self._jinZhiState = 8
		# A-F 8 9 按钮先禁用
		self.ui.btn_numA.setEnabled(False)
		self.ui.btn_numB.setEnabled(False)
		self.ui.btn_numC.setEnabled(False)
		self.ui.btn_numD.setEnabled(False)
		self.ui.btn_numE.setEnabled(False)
		self.ui.btn_numF.setEnabled(False)
		self.ui.btn_num8_3.setEnabled(False)
		self.ui.btn_num9_3.setEnabled(False)
		# A-F 8 9 按钮褪色
		self.ui.btn_numA.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numB.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numC.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numD.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numE.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_numF.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_num8_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_num9_3.setStyleSheet(self._ButtonStyleB)
		# 2-7按钮先启用
		self.ui.btn_num7_3.setEnabled(True)
		self.ui.btn_num6_3.setEnabled(True)
		self.ui.btn_num5_3.setEnabled(True)
		self.ui.btn_num4_3.setEnabled(True)
		self.ui.btn_num3_3.setEnabled(True)
		self.ui.btn_num2_3.setEnabled(True)
		# 2-7按钮色彩还原
		self.ui.btn_num7_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num6_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num5_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num4_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num3_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num2_3.setStyleSheet(self._ButtonStyleA)

		# MC M+ M- MR 按键禁用
		self.ui.btn_MC_3.setEnabled(False)
		self.ui.btn_MR_3.setEnabled(False)
		self.ui.btn_Madd_3.setEnabled(False)
		self.ui.btn_Msub_3.setEnabled(False)
		self.ui.btn_MC_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_MR_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_Madd_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_Msub_3.setStyleSheet(self._ButtonStyleB)

		self.ui.edit_exp.clear()  # 清除运算区表达式的内容

		if 'Err' in self.ui.edit_result.text():
			return

		if self.ui.edit_result.text() == '':
			return

		if '0x' in self.ui.edit_result.text():
			# 把结果从16进制转为8进制
			tem_str = self.ui.edit_result.text()
			nums = oct(int(tem_str, 16))
			self.ui.edit_result.setText(nums)
		elif '0o' in self.ui.edit_result.text():
			# 把结果从8进制转为8进制
			pass
		elif '0b' in self.ui.edit_result.text():
			# 把结果从2进制转为8进制
			tem_str = self.ui.edit_result.text()
			nums = oct(int(tem_str, 2))
			self.ui.edit_result.setText(nums)
		else:
			# 把结果从10进制转为8进制
			tem_str = self.ui.edit_result.text()
			nums = oct(int(tem_str))
			self.ui.edit_result.setText(nums)

		self.ui.lab_info_2.setText("{0} 计算结果(八进制显示):".format(self.expAreaString))

	def radio_hex_clicked(self):
		self._jinZhiState = 16
		# A-F 16进制专用按钮先启用
		self.ui.btn_numA.setEnabled(True)
		self.ui.btn_numB.setEnabled(True)
		self.ui.btn_numC.setEnabled(True)
		self.ui.btn_numD.setEnabled(True)
		self.ui.btn_numE.setEnabled(True)
		self.ui.btn_numF.setEnabled(True)
		self.ui.btn_num9_3.setEnabled(True)
		self.ui.btn_num8_3.setEnabled(True)
		self.ui.btn_num7_3.setEnabled(True)
		self.ui.btn_num6_3.setEnabled(True)
		self.ui.btn_num5_3.setEnabled(True)
		self.ui.btn_num4_3.setEnabled(True)
		self.ui.btn_num3_3.setEnabled(True)
		self.ui.btn_num2_3.setEnabled(True)
		# A-F 16进制专用按钮先启用
		self.ui.btn_numA.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_numB.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_numC.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_numD.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_numE.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_numF.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num8_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num9_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num7_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num6_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num5_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num4_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num3_3.setStyleSheet(self._ButtonStyleA)
		self.ui.btn_num2_3.setStyleSheet(self._ButtonStyleA)

		# MC M+ M- MR 按键禁用
		self.ui.btn_MC_3.setEnabled(False)
		self.ui.btn_MR_3.setEnabled(False)
		self.ui.btn_Madd_3.setEnabled(False)
		self.ui.btn_Msub_3.setEnabled(False)
		self.ui.btn_MC_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_MR_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_Madd_3.setStyleSheet(self._ButtonStyleB)
		self.ui.btn_Msub_3.setStyleSheet(self._ButtonStyleB)

		self.ui.edit_exp.clear()  # 清除运算区表达式的内容

		if 'Err' in self.ui.edit_result.text():
			return

		if self.ui.edit_result.text() == '':
			return

		if '0x' in self.ui.edit_result.text():
			# 把结果从16进制转为16进制
			pass
		elif '0o' in self.ui.edit_result.text():
			# 把结果从8进制转为16进制
			tem_str = self.ui.edit_result.text()
			nums = hex(int(tem_str, 8))
			self.ui.edit_result.setText(nums)
		elif '0b' in self.ui.edit_result.text():
			# 把结果从2进制转为16进制
			tem_str = self.ui.edit_result.text()
			nums = hex(int(tem_str, 2))
			self.ui.edit_result.setText(nums)
		else:
			# 把结果从10进制转为16进制
			tem_str = self.ui.edit_result.text()
			nums = hex(int(tem_str))
			self.ui.edit_result.setText(nums)

		self.ui.lab_info_2.setText("{0} 计算结果(十六进制显示):".format(self.expAreaString))

	def radio_8bit_clicked(self):
		self._bitWidth = 8
		self.ui.lab_64bitShow.setText(self._binByteShow[-8:])

	def radio_16bit_clicked(self):
		self._bitWidth = 16
		self.ui.lab_64bitShow.setText(self._binByteShow[-17:])

	def radio_32bit_clicked(self):
		self._bitWidth = 32
		self.ui.lab_64bitShow.setText(self._binByteShow[-35:])

	def radio_64bit_clicked(self):
		self._bitWidth = 64
		self.ui.lab_64bitShow.setText(self._binByteShow)

	# 位运算按钮事件处理函数
	def btn_bitAnd_clicked(self):
		self.ui.edit_exp.insert("&")
		self._operaAreaValState.clear()

	def btn_bitOr_clicked(self):
		self.ui.edit_exp.insert("|")
		self._operaAreaValState.clear()

	def btn_bitXor_clicked(self):
		self.ui.edit_exp.insert("^")
		self._operaAreaValState.clear()

	def btn_bitNot_clicked(self):
		self.ui.edit_exp.insert("~")
		self._operaAreaValState.clear()

	def btn_bitLeft_clicked(self):
		self.ui.edit_exp.insert("<<")
		self._operaAreaValState.clear()

	def btn_bitRight_clicked(self):
		self.ui.edit_exp.insert(">>")
		self._operaAreaValState.clear()

	def btn_numA_clicked(self):
		self.ui.edit_exp.insert("a")
		self._operaAreaValState.append('a')
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	def btn_numB_clicked(self):
		self.ui.edit_exp.insert("b")
		self._operaAreaValState.append('b')
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	def btn_numC_clicked(self):
		self.ui.edit_exp.insert("c")
		self._operaAreaValState.append('c')
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	def btn_numD_clicked(self):
		self.ui.edit_exp.insert("d")
		self._operaAreaValState.append('d')
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	def btn_numE_clicked(self):
		self.ui.edit_exp.insert("e")
		self._operaAreaValState.append('e')
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	def btn_numF_clicked(self):
		self.ui.edit_exp.insert("f")
		self._operaAreaValState.append('f')
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	# 数字0-9 按钮单击事件处理函数
	def btn_num0_3_clicked(self):
		self.ui.edit_exp.insert("0")
		self._operaAreaValState.append('0')
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	def btn_num1_3_clicked(self):
		self.ui.edit_exp.insert("1")
		self._operaAreaValState.append('1')
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	def btn_num2_3_clicked(self):
		self.ui.edit_exp.insert("2")
		self._operaAreaValState.append('2')
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	def btn_num3_3_clicked(self):
		self.ui.edit_exp.insert("3")
		self._operaAreaValState.append('3')
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	def btn_num4_3_clicked(self):
		self.ui.edit_exp.insert("4")
		self._operaAreaValState.append('4')
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	def btn_num5_3_clicked(self):
		self.ui.edit_exp.insert("5")
		self._operaAreaValState.append('5')
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	def btn_num6_3_clicked(self):
		self.ui.edit_exp.insert("6")
		self._operaAreaValState.append('6')
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	def btn_num7_3_clicked(self):
		self.ui.edit_exp.insert("7")
		self._operaAreaValState.append('7')
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	def btn_num8_3_clicked(self):
		self.ui.edit_exp.insert("8")
		self._operaAreaValState.append('8')
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	def btn_num9_3_clicked(self):
		self.ui.edit_exp.insert("9")
		self._operaAreaValState.append('9')
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	# 左右括号按钮单击事件信号槽
	def btn_leftBracked_3_clicked(self):
		self.ui.edit_exp.insert("(")

	def btn_rightBracked_3_clicked(self):
		self.ui.edit_exp.insert(")")

	# 加减乘除按钮单击事件处理函数 # + - ÷ ×
	def btn_add_3_clicked(self):
		temp_str = self.rightBracked_check(self.ui.edit_exp.text())  # 提示补全右括号
		self.ui.edit_exp.setText(temp_str)  # 同步结果
		self.ui.edit_exp.insert("+")
		self.ui.lab_info_2.setText("加")
		self._operaAreaValState.clear()

	def btn_sub_3_clicked(self):
		temp_str = self.rightBracked_check(self.ui.edit_exp.text())  # 提示补全右括号
		self.ui.edit_exp.setText(temp_str)  # 同步结果
		self.ui.edit_exp.insert("-")
		self.ui.lab_info_2.setText("减/负号")
		self._operaAreaValState.clear()

	def btn_ride_3_clicked(self):
		temp_str = self.rightBracked_check(self.ui.edit_exp.text())  # 提示补全右括号
		self.ui.edit_exp.setText(temp_str)  # 同步结果
		self.ui.edit_exp.insert("×")
		self.ui.lab_info_2.setText("乘")
		self._operaAreaValState.clear()

	def btn_div_3_clicked(self):
		temp_str = self.rightBracked_check(self.ui.edit_exp.text())  # 提示补全右括号
		self.ui.edit_exp.setText(temp_str)  # 同步结果
		self.ui.edit_exp.insert("÷")
		self.ui.lab_info_2.setText("除")
		self._operaAreaValState.clear()

	def btn_CE_3_clicked(self):
		'''
		清除屏幕显示到初始状态,不清除缓存
		'''
		self.ui.edit_exp.clear()
		self.ui.edit_result.clear()
		self.ui.edit_daxie.setText("零")
		self.ui.lab_info_2.setText("显示已清零")
		self._operaAreaValState.clear()
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新
		self.expAreaString = ''

	def btn_backspace_3_clicked(self):
		self.ui.edit_exp.backspace()
		if len(self._operaAreaValState) != 0:
			self._operaAreaValState.pop()
		self.addPrefixAndSetLab64bitShow()  # 二进制位字节显示区同步刷新

	def btn_bitOpera_clicked(self):
		temp_str = self.rightBracked_check(self.ui.edit_exp.text())  # 提示补全右括号
		self.ui.edit_exp.setText(temp_str)  # 同步结果

		# 缓存 表达式子
		if self._jinZhiState == 2:
			self.expAreaString = '二进制运算式[{0}]'.format(temp_str)
		elif self._jinZhiState == 8:
			self.expAreaString = '八进制运算式[{0}]'.format(temp_str)
		elif self._jinZhiState == 16:
			self.expAreaString = '十六进制运算式[{0}]'.format(temp_str)
		else:
			self.expAreaString = '十进制运算式[{0}]'.format(temp_str)

		temp_str = self.numStrToDecFilter(temp_str) # 将其他进制的数字串转换成10进制的数字串
		formula = textBitOpera(temp_str)  # 字符串替换,以便给eval函数运算

		# self.ui.edit_exp.insert("=")  # 在运算区表达式后面加上等号

		try:
			result = eval(formula)
			if self._jinZhiState == 2:
				result = bin(int(result))
				self.ui.lab_info_2.setText("{0} 计算结果:".format(self.expAreaString))
			elif self._jinZhiState == 8:
				result = oct(int(result))
				self.ui.lab_info_2.setText("{0} 计算结果:".format(self.expAreaString))
			elif self._jinZhiState == 16:
				result = hex(int(result))
				self.ui.lab_info_2.setText("{0} 计算结果:".format(self.expAreaString))
			else:
				self.ui.lab_info_2.setText("{0} 计算结果:".format(self.expAreaString))

			self.ui.edit_result.setText(str(result))
			#self.ui.edit_exp.clear() # 清空运算区内容

		except BaseException:
			self.ui.lab_info_2.setText("计算结果错误!")
			self.ui.edit_result.setText("Err")

		if 'Err' not in self.ui.edit_result.text():
			self.set_binByteShow(str(result))


	def addPrefixAndSetLab64bitShow(self):
		if len(self._operaAreaValState) == 0:
			self.ui.lab_64bitShow.setText('00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000')
		else:
			tem_str = ''.join(self._operaAreaValState)
			# if self._jinZhiState == 16:
			# 	tem_str = '0x' + tem_str
			# elif self._jinZhiState == 8:
			# 	tem_str = '0o' + tem_str
			# elif self._jinZhiState == 2:
			# 	tem_str = '0b' + tem_str
			# else:
			# 	pass

			self.set_binByteShow(tem_str)

			#test
			#print(self._operaAreaValState)

	def set_binByteShow(self,nums_str):
		'''设置 64位二进制字符串的'''
		# 先把其他进制的字符串参数都转成2进制字符串
		# 然后把转好后的二进制字符串换8位分割一下
		if len(nums_str) == 0:
			self.ui.lab_64bitShow.setText('00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000')
			return

		if self._jinZhiState == 16:
			tem_str = bin(int(nums_str, 16))
			tem_str = tem_str[2:]
		elif self._jinZhiState == 8:
			tem_str = bin(int(nums_str, 8))
			tem_str = tem_str[2:]
		elif self._jinZhiState == 2:
			tem_str = bin(int(nums_str, 2))
			tem_str = tem_str[2:]
			#tem_str = str(nums_str[2:])
		else:
			tem_str = bin(int(nums_str))
			tem_str = tem_str[2:]

		bit_init_str = '00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000'
		yuShu = len(tem_str) % 8
		bitList = re.findall(r'.{8}', tem_str[yuShu:])
		if yuShu != 0:
			bitList.insert(0,tem_str[0:yuShu])
		tem_str = ' '.join(bitList)
		tem_str = bit_init_str[0:71-len(tem_str)] + tem_str

		self._binByteShow = tem_str  #同步64位分节字符串

		if self._bitWidth == 8:
			self.ui.lab_64bitShow.setText(tem_str[-8:])
		elif self._bitWidth == 16:
			self.ui.lab_64bitShow.setText(tem_str[-17:])
		elif self._bitWidth == 32:
			self.ui.lab_64bitShow.setText(tem_str[-35:])
		else:
			self.ui.lab_64bitShow.setText(tem_str)

	def numStrToDecFilter(self, temp_str):
		""" 将其他进制的数字串转换成10进制的数字串 """
		# 数字和非数字区分开来,放在列表中 然后把数字串由其他进制转化10进制
		numsList = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']  # 所有数字(包含16进制a-f)
		temList = []
		resultList = []
		for i in range(len(temp_str)):
			if i == len(temp_str) - 1:
				if temp_str[i] in numsList:
					temList.append(i)
					# 把数字串由其他进制转化10进制
					numStr = temp_str[temList[0]:]
					if self._jinZhiState == 2:
						numStr = str(int(numStr, 2))
					elif self._jinZhiState == 8:
						numStr = str(int(numStr, 8))
					elif self._jinZhiState == 16:
						numStr = str(int(numStr, 16))
					else:
						pass
					resultList.append(numStr)

					temList.clear()
				else:
					temList.append(i)
					resultList.append(temp_str[temList[0]:])
					temList.clear()
			else:
				if temp_str[i] in numsList:
					temList.append(i)
					if temp_str[i + 1] not in numsList:

						# 把数字串由其他进制转化10进制
						numStr = temp_str[temList[0]:i + 1]
						if self._jinZhiState == 2:
							numStr = str(int(numStr, 2))
						elif self._jinZhiState == 8:
							numStr = str(int(numStr, 8))
						elif self._jinZhiState == 16:
							numStr = str(int(numStr, 16))
						else:
							pass
						resultList.append(numStr)

						temList.clear()
				else:
					temList.append(i)
					if temp_str[i + 1] in numsList:
						resultList.append(temp_str[temList[0]:i + 1])
						temList.clear()

		return ''.join(resultList)


if __name__ == '__main__':
	app = PySide2.QtWidgets.QApplication(sys.argv)
	hyCalc = HyCalc()
	hyCalc.ui.show()
	app.exec_()

=============================================================

—————– 附件:img文件夹 hy-calc.ui —————

计算器 UI设计文件 和 图标资源

附件下载链接:

链接:https://pan.baidu.com/s/1Evnzj3Ulx0V4Aq0rNUttJw 提取码:g1oi

本文来自辉宇工作室原创,转载请注明出处。

作者: huiyu68

广告位

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

18938113345

在线咨询: QQ交谈

邮箱: liwenhui_163@163.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部