当前位置:首页>python>29.Python实战__用Python写个计算器

29.Python实战__用Python写个计算器

  • 2026-10-11 07:39:47
29.Python实战__用Python写个计算器
    今天用Python写个加、减、乘、除 的数学计算器,算是一个综合应用型的案例,里面涉及相对多的Python知识点,如果能熟练的掌握本节的案例并实战操作几遍,相信业余人士应该可以制作一些简单的带GUI界面的小程序了。
    先看计算器效果
今天用到的新知识点:
1)pyside6控制信号发射对象 sender():
① 用来捕获发射信号的对象,并获取对象的相关属性和方法;
② 比如:窗口中有很多控件,要知道点击了那个按钮,就可以用sender()的text()属性,看看他的 ”文字“ 是什么就知道是那个控件被点击了。
2)eval( )函数:

① eval()把字符串转换为算术计算式;

例:a= “1+2*3” 为一个字符串

    eval( a ) 就可以进行数学计算了,相当于1+2*3一个可以用于计算的算式;

附原代码如下:
一、还是先导入用到的模块
from PySide6.QtCore import Qtfrom PySide6.QtWidgets import QWidget, QApplication,      QPushButton, QGridLayout, QLineEdit
二、创建类,命名为Calculator
class Calculator(QWidget):      def __init__(self):            super().__init__()            # 设置窗口名称            self.setWindowTitle("计算器")            # 设置窗口尺寸            self.resize(500, 200)            # 设置CSS样式,后面会讲,可以先跳过            self.setStyleSheet("""                         QPushButton                        {                          background-color: pink;                          font-size: 20px;                                              border-radius: 10px;                        }                                QPushButton:hover                                        {  background-color: lightpink;  }                        QPushButton:pressed                                      {  background-color: hotpink;    }                        QLineEdit                        {  font-size:20px;               }                        QLabel                        {  font-size:30px;                           color: red;                                      }                               """)    # 创建水平布局    self.main_lay = QGridLayout()            # 设置水平布局主布局            self.setLayout(self.main_lay)            self.main_lay.setAlignment(Qt.AlignTop)            # 设置布局间隙为10            self.main_lay.setSpacing(10)            # 创建一个实例方法            self.setup_01()
三、创建实例方法setup_01,在该方法中创建控件
def setup_01(self):      # 创建结果显示框      self.display = QLineEdit()      # 设置显显示框固定高度为35      self.display.setFixedHeight(35)      # 把结果显示框添加到布局中      self.main_lay.addWidget(self.display, 0, 0, 1, -1)      # 设置所有按钮的(文本, 行号,列号)为一个列表,方便for 循环创建      self.btn = [                ("C", 1, 0), ("(", 1, 1), (")", 1, 2), ("←", 1, 3),                                ("1", 2, 0), ("2", 2, 1), ("3", 2, 2), ("+", 2, 3),                ("4", 3, 0), ("5", 3, 1), ("6", 3, 2), ("-", 3, 3),                ("7", 4, 0), ("8", 4, 1), ("9", 4, 2), ("*", 4, 3),                (".", 5, 0), ("0", 5, 1), ("=", 5, 2), ("/", 5, 3)             ]      # 使用 for循环 创建所有按钮      for btn_text, row, col in self.btn:          btn = QPushButton(btn_text)          # 为每个按钮连接一个槽函数 self.click          btn.clicked.connect(self.click)  # 把所有控件添加到布局中          self.main_lay.addWidget(btn, row, col)
四、创建槽函数,也是最重要的实现逻辑
def click(self):      # 跟踪信号发对象,赋值给 sender      sender = self.sender()      # 获取信号对象的 文本内容      btn_text = sender.text()      # 获取结果显示框内当前的文字内容      current_text = self.display.text()      # 如果发射信号的按钮是 C 按钮,则清空显示框      if sender.text() == "C":          self.display.clear()      # 如果发射信号的按钮是 = “等号” 按钮,则计算结果,并设置到显示框内      elif sender.text() == "=":            try:                  result = eval(self.display.text())                  self.display.setText(f"{current_text} = {result}")            except:                  self.display.setText("错误")        # 如果发射信号的按钮是 ← “退格” 按钮,则删除最后一个字符        elif sender.text() == "←":              text = current_text[:-1]              self.display.setText(text)        else:              self.display.setText(current_text + btn_text)
    其实控件GUI控制部分大部分都是固定的套路,写二遍就差不多吃透了,最难的还是计算逻辑部分。
    自己刚开始学总觉得GUI是最容易出成果的,也最能看出效果,写了一段代码,慢慢的体会到,最难的、也是编程中最重要的部分,还是算法和逻辑推理部分;这也是为什么在编程行业中,搞算法的永远是大师;
    软件的GUI就和 网页前端差不多,只负责展示效果,后端的实现逻辑永远是无形的强大力量;当你作为一个业余人士体会到这点时,说明你已经入门了。

最新文章

随机文章