使用python写一个比Windows系统自带浏览器更好用的计算器

16 篇文章 3 订阅
14 篇文章 1 订阅
本文介绍了作者用Python和PyQt5开发的一款双行显示计算器,具有括号优先级运算、历史记录、界面定制等功能,以解决Web端数据处理中的不便,同时提到进阶版本的改进点和下载链接。
摘要由CSDN通过智能技术生成

【介绍】

比Windows系统自带的还好用的计算器,感兴趣的可以试用一下。
1.支持括号优先级运算和平方、立方计算;
2.支持计算历史记录功能;
3.支持界面缩放和拖动;
4.支持钉在界面(界面最前置顶),再次点击取消置顶;
5.支持复杂的组合计算,支持鼠标点击和通过键盘方式输入算式;

【背景】

最近几天测试时,经常需要将web端页面的一些数据加起来汇总,Windows10自带的计算机用的真的是蛋疼,于是,自己写了一个计算器,解决使用过程中的一些体验问题。

【功能】

用python+pyqt5写了一个双行显示的计算器,计算器一个显示界面显示输入的复杂的算式,如带括号的加减乘除法,计算顺序需要遵循数学计算规则。

详细代码如下:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLineEdit, QLabel
from PyQt5.QtGui import QFont, QIcon


class CalculatorApp(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('双行计算器')
        self.setWindowIcon(QIcon('icon.png'))  # 设置窗体图标

        # 设置输入框和结果显示框的样式
        self.input_line = QLineEdit()
        self.input_line.setReadOnly(True)
        self.input_line.setFont(QFont("Arial", 20))

        self.result_label = QLabel()
        self.result_label.setFont(QFont("Arial", 24))

        self.create_buttons()

        main_layout = QVBoxLayout()
        main_layout.addWidget(self.input_line)
        main_layout.addWidget(self.result_label)
        main_layout.addLayout(self.button_layout)

        self.setLayout(main_layout)

    def create_buttons(self):
        self.buttons = [
            '(', ')', '√', 'x^2',
            'x^3', '←', 'C', '/',
            '7', '8', '9', '*',
            '4', '5', '6', '-',
            '1', '2', '3', '+',
            '0', '00', '.', '='
        ]

        self.button_layout = QVBoxLayout()
        for i in range(6):
            row_layout = QHBoxLayout()
            for j in range(4):
                button = QPushButton(self.buttons[i * 4 + j])
                button.clicked.connect(self.on_button_click)
                button.setFont(QFont("Arial", 16))
                row_layout.addWidget(button)
            self.button_layout.addLayout(row_layout)

    def on_button_click(self):
        button = self.sender()
        clicked_text = button.text()
        current_text = self.input_line.text()

        if clicked_text == '=':
            try:
                result = eval(current_text)
                self.result_label.setText(str(result))
            except:
                self.result_label.setText('Error')
        elif clicked_text == 'C':
            self.input_line.clear()
            self.result_label.clear()
        elif clicked_text == '←':
            self.input_line.setText(str(self.input_line.text()[0:-1]))
        else:
            self.input_line.setText(current_text + clicked_text)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    calc_app = CalculatorApp()
    calc_app.show()
    sys.exit(app.exec_())

【运行效果】

经过验证,初步已经达到了预期。

【进阶版】

虽然功能上已经比自带的好一点,但是仍然不是很好用。

1、美化UI的颜色、边框和点击效果;

2、区分显示输入的算式内容,将删除、清除按钮、加减乘除和等号设置不同的颜色,便于区分。

3、增加计算历史记录显示功能,点击查看历史按钮,可以显示之前算式的内容和结果;

4、增加窗口置顶(钉在屏幕上),再次点击取消置顶;

5、调整美化字体;

6、窗口实现自适应;

【进阶版效果】

默认效果:

全屏效果:

【下载体验】

资源已上传,可免费下载体验,欢迎提供优化建议。

下载链接:

https://download.csdn.net/download/zh6526157/88780297

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,这里是一个简单的 Python 实现,它可以实现基本的计算器功能,例如加、减、乘、除、开方和清空。 ``` import tkinter as tk import math class Calculator: def __init__(self, master): self.master = master master.title("Calculator") # 创建显示屏 self.screen = tk.Entry(master, width=25, justify="right", font=("Arial", 16)) self.screen.grid(row=0, column=0, columnspan=4, pady=5) # 创建按钮 self.create_button("C", self.clear, 1, 0) self.create_button("√", self.sqrt, 1, 1) self.create_button("/", lambda: self.add_operator("/"), 1, 2) self.create_button("*", lambda: self.add_operator("*"), 1, 3) self.create_button("7", lambda: self.add_number(7), 2, 0) self.create_button("8", lambda: self.add_number(8), 2, 1) self.create_button("9", lambda: self.add_number(9), 2, 2) self.create_button("-", lambda: self.add_operator("-"), 2, 3) self.create_button("4", lambda: self.add_number(4), 3, 0) self.create_button("5", lambda: self.add_number(5), 3, 1) self.create_button("6", lambda: self.add_number(6), 3, 2) self.create_button("+", lambda: self.add_operator("+"), 3, 3) self.create_button("1", lambda: self.add_number(1), 4, 0) self.create_button("2", lambda: self.add_number(2), 4, 1) self.create_button("3", lambda: self.add_number(3), 4, 2) self.create_button("=", self.calculate, 4, 3, rowspan=2) self.create_button("0", lambda: self.add_number(0), 5, 0, columnspan=2) self.create_button(".", self.add_decimal, 5, 2) # 初始化状态 self.reset() def create_button(self, text, command, row, column, rowspan=1, columnspan=1): button = tk.Button(self.master, text=text, width=5, height=2, font=("Arial", 16), command=command) button.grid(row=row, column=column, rowspan=rowspan, columnspan=columnspan, padx=2, pady=2) def reset(self): self.operator = None self.operand1 = None self.operand2 = None self.screen.delete(0, tk.END) def add_number(self, number): if self.operator is None: if self.operand1 is None: self.operand1 = number else: self.operand1 = self.operand1 * 10 + number self.screen.delete(0, tk.END) self.screen.insert(0, self.operand1) else: if self.operand2 is None: self.operand2 = number else: self.operand2 = self.operand2 * 10 + number self.screen.delete(0, tk.END) self.screen.insert(0, self.operand2) def add_decimal(self): if self.operator is None: if self.operand1 is None: self.operand1 = 0 if '.' not in str(self.operand1): self.operand1 = float(str(self.operand1) + '.') self.screen.delete(0, tk.END) self.screen.insert(0, self.operand1) else: if self.operand2 is None: self.operand2 = 0 if '.' not in str(self.operand2): self.operand2 = float(str(self.operand2) + '.') self.screen.delete(0, tk.END) self.screen.insert(0, self.operand2) def add_operator(self, operator): if self.operator is None: self.operator = operator self.screen.delete(0, tk.END) self.screen.insert(0, operator) else: self.calculate() self.operator = operator self.screen.delete(0, tk.END) self.screen.insert(0, operator) def calculate(self): if self.operator is not None and self.operand1 is not None and self.operand2 is not None: if self.operator == "+": result = self.operand1 + self.operand2 elif self.operator == "-": result = self.operand1 - self.operand2 elif self.operator == "*": result = self.operand1 * self.operand2 elif self.operator == "/": result = self.operand1 / self.operand2 self.screen.delete(0, tk.END) self.screen.insert(0, result) self.operand1 = result self.operand2 = None self.operator = None def clear(self): self.reset() def sqrt(self): if self.operator is None: if self.operand1 is not None: result = math.sqrt(self.operand1) self.screen.delete(0, tk.END) self.screen.insert(0, result) self.operand1 = result root = tk.Tk() calculator = Calculator(root) root.mainloop() ``` 这个计算器实现了基本的加、减、乘、除、开方和清空功能,你可以用它来进行简单的计算。当你按下数字键时,它会显示在屏幕上;当你按下操作符时,它会计算之前的结果,并在屏幕上显示操作符;当你按下等于号时,它会计算当前的结果,并显示在屏幕上。同时,你也可以通过按下清空键来重新开始计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

《代码爱好者》

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值