主要内容 #
1. 模块概况 #
所有的成员函数模块都在做类似的如下操作
第一步读取当前文本框的内容
第二步基于当前的操作符,然后按需获取之前的数据进行综合的操作处理
第三步将处理的结果给到文本框。
程序如下:
def deal_btn(self):
_str = self.line_edit.text() # 获取文本框中的内容
# some operate # 按需进行处理,可能需要获取前面保存的数据等
self.line_edit.setText(_str) # 按需将处理好的数据结果返回到文本框
2. 数字操作模块 #
这里需要完成的功能包括两部分:
第一部分是shou_msg,用于将结果显示在文本框;
第二部分是数字的操作模块,主要是将数字显示在文本框中。
程序如下:
(将以下程序添加到Calculator类中)
def show_msg(self):
sender = self.sender() # 信号
sender_text = sender.text() # 获取该信号的文本,也就是按钮的文本信息
# 如下是对各个按钮进行判断,这次已经写完所有判断,但是有些判断还未实现
if sender_text == 'C':
self.clear_line_edit() # 清除屏幕
elif sender_text in self.nums:
self.deal_num_btn(sender_text) # 处理数字
elif sender_text == '.':
self.deal_point_btn() # 处理小数点
elif sender_text in self.operators:
self.deal_operator_btn(sender_text) # 处理操作符
elif sender_text == '=': #处理等于号
self.deal_equal_btn()
elif sender_text == '+/-': # 处理正负号
self.deal_sign_btn()
elif sender_text == 'x': # 处理删除符号
self.deal_return_btn()
def deal_num_btn(self, sender_text):
'''
处理数字,将屏幕点击的数字输入到文本框中
参数:sender_text,也就是当前按钮的文本数据
'''
if self.after_operator: # 如果当前信号输入的文本是在操作符之后,需要将文本框的内容先清除
self.line_edit.clear() # 清除文本框
self.after_operator = False # flag置为false
_str = self.line_edit.text() # 获取文本框的内容
if _str == '0' or _str == 'Error' or self.empty_flag:
_str = ''
self.line_edit.setText(_str + sender_text) # 将文本框的内容和当前按钮的输入内容合并发送给文本框
self.empty_flag = False # 非空
为QPushButton控件的clicked方法连接到上述功能(即信号传递)
在initUI函数中添加该连接,程序如下:
btn.clicked.connect(self.show_msg)
3. 小结 #
- 计算器的模块操作能抽象出一个简单的通用模块
- 本章完成了数字操作模块
习题 #
- 无