主要内容 #
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. 小结 #
- 计算器的模块操作能抽象出一个简单的通用模块
- 本章完成了数字操作模块
习题 #
- 无