Python旧版课程库
Python第 05 期 - 应用查看课程总览

145 pyqt小应用-计算器 2

主要内容

  • 模块概况
  • 数字操作模块
  • 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. 小结

    • 计算器的模块操作能抽象出一个简单的通用模块
    • 本章完成了数字操作模块

    习题