基于PyQt5的简易计算器之三
提示:基于PyQt5的简易计算器之一为环境搭建
基于PyQt5的简易计算器之一为环境搭建
基于PyQt5的简易计算器之二为Qt Designer使用
基于PyQt5的简易计算器之三为pycharm中实现按键的功能
pycharm中实现按键的功能
import 部分
import sys
# 导入系统,不用对其pip安装
from PyQt5.QtWidgets import QApplication,QWidget
# 需要pip安装 PyQt5,已在基于PyQt5的简易计算器之一 环境的搭建中实现
from CalcuInterface import Ui_widget
# 用户自己定义的,为ui转为py文件中的类,已在基于PyQt5的简易计算器之二 Qt Designer 中实现
from PyQt5.QtGui import QIcon
# 用于加入软件独特的logo
一、创建类
class QmyWidget(QWidget):
# QmyWidget为创建的类名称,可以修改。
二、初始化定义
def __init__(self,parent = None): # ==注意init前后两个短线 _ _==
# 从文件中加载UI定义
# 从 UI 定义中动态 创建一个相应的窗口对象
# 注意:里面的控件对象也成为窗口对象的属性了
super().__init__(parent) # 调用父类构造函数,创建QtWidget窗口
self.label_text = '' # 定义一个变量,用于存放运算方程
self.edit_text = '' # 定义一个变量,用于按键输入的数值和运算符号
self.num1 = '' # 定义一个变量,用于存放输入的第一个数
self.num2 = ''
self.opt = '' # 定义一个变量,用于存放运算符
self.result = '' # 定义一个变量,用于存放运算结果
self.__ui = Ui_widget() # 创建UI对象
self.__ui.setupUi(self) # 创建UI界面
self.__ui.lineEdit_op.setText('0') #编辑框lineEdit_op初始化,第二个框名称lineEdit_op
self.__ui.display.setText('0') #结果显示框display初始化,第一个框名称display
三、数字0-9
以3 为例
def on_three_pressed(self): # three为按键3 的名称,如之二图中定义按键的名称
self.label_text += '3'
# 存放所有的输入,包括此时的输入:3
if(self.opt == ''): # 若没有输入运算符,则给第一个数值后面
self.num1 += '3'
self.edit_text = self.num1 # 将数值1给变量edit_text,为后面在第二个框中显示做铺垫
else:
self.num2 += '3' # 若有运算符,则将3 给第二个数值后面
self.edit_text = self.num2 # 同理
self.__ui.lineEdit_op.setText(self.edit_text) # 将输入的数值,显示在第二个框中
self.__ui.display.setText(self.label_text) #将所有的输入,显示在第一个框中
其他数值类似。
四、点
点的功能和数字相似,因此写在这个地方
def on_point_pressed(self):
self.label_text += '.'
# 存放所有的输入,包括此时的输入:3
if(self.opt == ''): # 若没有输入运算符,则给第一个数值后面
self.num1 += '.'
self.edit_text = self.num1 # 将数值1给变量edit_text,为后面在第二个框中显示做铺垫
else:
self.num2 += '.' # 若有运算符,则将3 给第二个数值后面
self.edit_text = self.num2 # 同理
self.__ui.lineEdit_op.setText(self.edit_text) # 将输入的数值,显示在第二个框中
self.__ui.display.setText(self.label_text) #将所有的输入,显示在第一个框中
四、加减乘除
以加为例
def on_add_pressed(self):
if (self.num1 == '' or self.opt !=''): # 若第一个数为空,或运算符为空,点击运算符失效
pass
else: # 否则
self.label_text +='+' # 第一个显示屏的变量继续储存
self.opt = '+' # 运算符储存 +
self.__ui.display.setText(self.label_text) # 第一个显示屏显示输入的“第一个数+”的内容,第二个框不做变化,还是第一个数值。
其他类似
五、 等于
def on_equal_pressed(self):
if (self.num2 == ''): # 没有两个数时,等号无效
pass
else:
if(self.opt == '+'):
self.result = str(float(self.num1) + float(self.num2))
elif (self.opt == '-'):
self.result = str(float(self.num1) - float(self.num2))
elif (self.opt == '×'):
self.result = str(float(self.num1) * float(self.num2))
elif (self.opt == '÷'):
self.result = str(float(self.num1) / float(self.num2))
self.label_text = self.label_text + '=' +self.result # 将等于号和等于结果给第一个框的变量
self.edit_text = self.result # 将结果给第二个框的变量
self.__ui.lineEdit_op.setText(self.edit_text) # 在第二个框中显示结果
self.__ui.display.setText(self.label_text) # 在第一个框中显示方程
# 对以上五个变量初始化。清空所有值。
self.label_text = ''
self.edit_text = ''
self.num1 = ''
self.num2 = ''
self.opt = ''
self.result = ''
六、 清除命令
清除命令较为简单,即等于后面的初始化+ 两个显示屏的清除
def on_clearall_pressed(self):
self.__ui.lineEdit_op.clear() # 第二个显示屏的清除
self.__ui.display.clear() # 第一个显示屏的清除
self.label_text = ''
self.edit_text = ''
self.num1 = ''
self.num2 = ''
self.opt = ''
self.result = ''
七、 退格命令
输错了,消除掉此次输入错误的一步
#退格
def on_remove_pressed(self):
if(self.opt == ''): # 若运算符没有输入时,即第一个数值
self.num1 = self.num1[0:-1] # 字符串的切片,最后一个字符不要了
self.edit_text = self.num1 # 修改此时的第二个框的内容
self.label_text = self.num1 # 修改此时的第一个框的内容
elif (self.opt != '' and self.num2 == '' ): # 若运算符输入,第二个数值没有输入时,即运算符
self.opt = '' # 将运算符清空
self.label_text = self.label_text[0:-1] # 将第一个框的变量中去掉运算符
elif(self.num2 != ''): # 若第二个数值不为空,即对第二个数值操作
self.num2 = self.num2[0:-1] # 第二个数的字符串最后一个字符不要了
self.edit_text = self.edit_text[0:-1] # 第二个显示屏的字符串最后一个字符不要了
self.label_text = self.label_text[0:-1] # 第一个数的字符串最后一个字符不要了
self.__ui.lineEdit_op.setText(self.edit_text) # 第一个显示屏显示
self.__ui.display.setText(self.label_text) # 第二个显示屏显示
八、 主程序
以下为固定格式,可以改变的为
- QmyWidget(),此类为以上文件定义的类名成。
- app.setWindowIcon(QIcon(‘logo.png’)) 可以去掉,用于软件运行时,左上角的logo. 图片随便找个就行。
if __name__ == "__main__": #固定格式
app = QApplication(sys.argv)
# 加载
app.setWindowIcon(QIcon('logo.png'))
myWidget = QmyWidget()
myWidget.show()
sys.exit(app.exec_())
九、 完整的py文件
import sys
from PyQt5.QtWidgets import QApplication,QWidget
from CalcuInterface import Ui_widget
from PyQt5.QtGui import QIcon
class QmyWidget(QWidget):
def __init__(self,parent = None):
# 从文件中加载UI定义
# 从 UI 定义中动态 创建一个相应的窗口对象
# 注意:里面的控件对象也成为窗口对象的属性了
super().__init__(parent) # 调用父类构造函数,创建QtWidget窗口
self.label_text = ''
self.edit_text = ''
self.num1 = ''
self.num2 = ''
self.opt = ''
self.result = ''
self.__ui = Ui_widget() # 创建UI对象
self.__ui.setupUi(self) # 创建UI界面
self.__ui.lineEdit_op.setText('0') #编辑框lineEdit_op初始化
self.__ui.display.setText('0') #结果显示框display初始化
# 数字0-9
def on_zero_pressed(self): # zero是0的按键名
self.label_text += '0'
if(self.opt == ''):
self.num1 += '0'
self.edit_text = self.num1
else:
self.num2 += '0'
self.edit_text = self.num2
self.__ui.lineEdit_op.setText(self.edit_text)
self.__ui.display.setText(self.label_text)
def on_one_pressed(self):
self.label_text += '1'
if(self.opt == ''):
self.num1 += '1'
self.edit_text = self.num1
else:
self.num2 += '1'
self.edit_text = self.num2
self.__ui.lineEdit_op.setText(self.edit_text)
self.__ui.display.setText(self.label_text)
def on_two_pressed(self):
self.label_text += '2'
if(self.opt == ''):
self.num1 += '2'
self.edit_text = self.num1
else:
self.num2 += '2'
self.edit_text = self.num2
self.__ui.lineEdit_op.setText(self.edit_text)
self.__ui.display.setText(self.label_text)
def on_three_pressed(self):
self.label_text += '3'
if(self.opt == ''):
self.num1 += '3'
self.edit_text = self.num1
else:
self.num2 += '3'
self.edit_text = self.num2
self.__ui.lineEdit_op.setText(self.edit_text)
self.__ui.display.setText(self.label_text)
def on_four_pressed(self):
self.label_text += '4'
if(self.opt == ''):
self.num1 += '4'
self.edit_text = self.num1
else:
self.num2 += '4'
self.edit_text = self.num2
self.__ui.lineEdit_op.setText(self.edit_text)
self.__ui.display.setText(self.label_text)
def on_five_pressed(self):
self.label_text += '5'
if(self.opt == ''):
self.num1 += '5'
self.edit_text = self.num1
else:
self.num2 += '5'
self.edit_text = self.num2
self.__ui.lineEdit_op.setText(self.edit_text)
self.__ui.display.setText(self.label_text)
def on_six_pressed(self):
self.label_text += '6'
if(self.opt == ''):
self.num1 += '6'
self.edit_text = self.num1
else:
self.num2 += '6'
self.edit_text = self.num2
self.__ui.lineEdit_op.setText(self.edit_text)
self.__ui.display.setText(self.label_text)
def on_seven_pressed(self):
self.label_text += '7'
if(self.opt == ''):
self.num1 += '7'
self.edit_text = self.num1
else:
self.num2 += '7'
self.edit_text = self.num2
self.__ui.lineEdit_op.setText(self.edit_text)
self.__ui.display.setText(self.label_text)
def on_eight_pressed(self):
self.label_text += '8'
if(self.opt == ''):
self.num1 += '8'
self.edit_text = self.num1
else:
self.num2 += '8'
self.edit_text = self.num2
self.__ui.lineEdit_op.setText(self.edit_text)
self.__ui.display.setText(self.label_text)
def on_nine_pressed(self):
self.label_text += '9'
if(self.opt == ''):
self.num1 += '9'
self.edit_text = self.num1
else:
self.num2 += '9'
self.edit_text = self.num2
self.__ui.lineEdit_op.setText(self.edit_text)
self.__ui.display.setText(self.label_text)
# 附加功能:点号
def on_point_pressed(self):
self.label_text += '.'
if(self.opt == ''):
self.num1 += '.'
self.edit_text = self.num1
else:
self.num2 += '.'
self.edit_text = self.num2
self.__ui.lineEdit_op.setText(self.edit_text)
self.__ui.display.setText(self.label_text)
# 加减乘除
def on_add_pressed(self):
if (self.num1 == '' or self.opt !=''):
pass
else:
self.label_text +='+'
self.opt = '+'
self.__ui.display.setText(self.label_text)
def on_subtract_pressed(self):
if (self.num1 == '' or self.opt !=''):
pass
else:
self.label_text +='-'
self.opt = '-'
self.__ui.display.setText(self.label_text)
def on_multiply_pressed(self):
if (self.num1 == '' or self.opt !=''):
pass
else:
self.label_text +='×'
self.opt = '×'
self.__ui.display.setText(self.label_text)
def on_divid_pressed(self):
if (self.num1 == '' or self.opt !=''):
pass
else:
self.label_text +='÷'
self.opt = '÷'
self.__ui.display.setText(self.label_text)
# 等于
def on_equal_pressed(self):
if (self.num2 == ''): # 没有两个数时,等号无效
pass
else:
if(self.opt == '+'):
self.result = str(float(self.num1) + float(self.num2))
elif (self.opt == '-'):
self.result = str(float(self.num1) - float(self.num2))
elif (self.opt == '×'):
self.result = str(float(self.num1) * float(self.num2))
elif (self.opt == '÷'):
self.result = str(float(self.num1) / float(self.num2))
self.label_text = self.label_text + '=' +self.result
self.edit_text = self.result
self.__ui.lineEdit_op.setText(self.edit_text)
self.__ui.display.setText(self.label_text)
self.label_text = ''
self.edit_text = ''
self.num1 = ''
self.num2 = ''
self.opt = ''
self.result = ''
# 清除命令
def on_clearall_pressed(self):
self.__ui.lineEdit_op.clear()
self.__ui.display.clear()
self.label_text = ''
self.edit_text = ''
self.num1 = ''
self.num2 = ''
self.opt = ''
self.result = ''
#退格
def on_remove_pressed(self):
if(self.opt == ''):
self.num1 = self.num1[0:-1]
self.edit_text = self.num1
self.label_text = self.num1
elif (self.opt != '' and self.num2 == '' ):
self.opt = ''
self.label_text = self.label_text[0:-1]
elif(self.num2 != ''):
self.num2 = self.num2[0:-1]
self.edit_text = self.edit_text[0:-1]
self.label_text = self.label_text[0:-1]
self.__ui.lineEdit_op.setText(self.edit_text)
self.__ui.display.setText(self.label_text)
# 括弧
# def on_brackets_left_pressed(self):
if __name__ == "__main__":
app = QApplication(sys.argv)
# 加载
app.setWindowIcon(QIcon('logo.png'))
myWidget = QmyWidget()
myWidget.show()
sys.exit(app.exec_())
总结
提示:这里对文章进行总结:
以上就是今天要讲的内容,本文将按键的功能如何实现进行了介绍。以下将对软件的发布进行介绍。