吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4291|回复: 13
收起左侧

[Python 转载] 【python】基于pyside2图形化界面的简易计算器

  [复制链接]
zhooou 发表于 2020-6-6 14:16
        本人小白一枚,之前自学了一点python基础,只写过一些简单的的程序,前两天看到论坛里有大佬自己做了个图形化界面的工具,想到自己还没接触过图形化界面,然后想自己动手写个图形化小工具,最后决定用pyside2库来写个最基础的简易计算器,看英文官方文档实在是太头疼了,昨天来论坛求中文资料未果,于是决定硬着头皮看吧,一边看一边百度,终于做出来了嘿嘿,就是功能简单了些,本来想打包成exe的,发现打包报错了,最后的exe文件打开不能用,就没继续研究了,有兴趣的可以下载看看,共同学习,希望大佬们可以多多指正,源码放到蓝奏云了:https://haohaizi.lanzouj.com/i3Wm0de32pc
再放一张运行的动图供大家预览
ScreenGif2.gif

下边把源码也贴出来吧,不过只有这个源码运行不了,还需要下载ui文件,配合起来才能运行
import PySide2.QtWidgets as QtWidgets
from PySide2.QtUiTools import QUiLoader
import time

class SimpleCalculator():
    def __init__(self):
        self.ui = QUiLoader().load('SimpleCalculator.ui')  #加载ui界面

        # 数字按键
        self.ui.pushButton_0.clicked.connect(lambda:self.click_num('0'))
        self.ui.pushButton_1.clicked.connect(lambda:self.click_num('1'))
        self.ui.pushButton_2.clicked.connect(lambda:self.click_num('2'))
        self.ui.pushButton_3.clicked.connect(lambda:self.click_num('3'))
        self.ui.pushButton_4.clicked.connect(lambda:self.click_num('4'))
        self.ui.pushButton_5.clicked.connect(lambda:self.click_num('5'))
        self.ui.pushButton_6.clicked.connect(lambda:self.click_num('6'))
        self.ui.pushButton_7.clicked.connect(lambda:self.click_num('7'))
        self.ui.pushButton_8.clicked.connect(lambda:self.click_num('8'))
        self.ui.pushButton_9.clicked.connect(lambda:self.click_num('9'))

        # 功能按键
        self.ui.pushButton_point.clicked.connect(lambda:self.do('.'))
        self.ui.pushButton_sum.clicked.connect(lambda:self.do('+'))
        self.ui.pushButton_sub.clicked.connect(lambda:self.do('-'))
        self.ui.pushButton_muti.clicked.connect(lambda:self.do('*'))
        self.ui.pushButton_div.clicked.connect(lambda:self.do('/'))
        self.ui.pushButton_left.clicked.connect(lambda: self.click('('))
        self.ui.pushButton_right.clicked.connect(lambda: self.click(')'))
        self.ui.pushButton_done.clicked.connect(self.done)  # 等于号"="
        self.ui.pushButton_clear.clicked.connect(self.clear)  # 清除键
        self.ui.pushButton_del.clicked.connect(self.del_end)  # 退格键
        self.ui.pushButton_output.clicked.connect(self.output)

    # 数字按键响应函数
    def click_num(self, num_str):
        num = self.ui.result.toPlainText()
        if num != '' and num_str == '0':
            new_num = str(num) + num_str
            self.ui.result.setText(new_num)
        if num_str != '0':
            new_num = str(num) + num_str
            self.ui.result.setText(new_num)

    # 括号按键响应函数
    def click(self, what_str):
        num = self.ui.result.toPlainText()
        if what_str == '(':
            new_num = str(num) + what_str
            self.ui.result.setText(new_num)
        if what_str == ')' and num != '':
            new_num = str(num) + what_str
            self.ui.result.setText(new_num)

    # 功能按键响应函数
    def do(self, do_what):
        num = self.ui.result.toPlainText()
        if num != '':
            sym_list = ('+', '-', '*', '/', '.', '(')
            if not num.endswith(sym_list):
                new_num = str(num) + do_what
                self.ui.result.setText(new_num)

    # 计算函数
    def done(self):
        num = self.ui.result.toPlainText()
        if num != '':
            sym_list = ('+', '-', '*', '/', '.', '(')
            if not num.endswith(sym_list):
                try:
                    result = eval(num)
                    self.ui.result_history.append(num + '=' + str(result))
                    self.ui.result.setText(str(result))
                except:
                    QtWidgets.QMessageBox.about(self.ui, '提示', '请输入正确的表达式')
            else:
                QtWidgets.QMessageBox.about(self.ui,'提示','请输入正确的表达式')

    # 退格按键响应函数
    def del_end(self):
        num = self.ui.result.toPlainText()
        if num != '':
            new_num = ''
            for i in range(len(num) - 1):
                new_num += num[i]
            self.ui.result.setText(new_num)

    # 清除按键响应函数
    def clear(self):
        self.ui.result.setText('')
        self.ui.result_history.setText('')

    # 获取当前时间,精确到秒
    def getTimeSecond(self):
        timestamp = time.time() + 0 * 3600  # 东八区时间
        time_tuple = time.localtime(timestamp)
        time_str = time.strftime("%Y-%m-%d %H:%M:%S", time_tuple)
        return time_str

    # 导出历史记录
    def output(self):
        history = self.ui.result_history.toPlainText()
        if history == '':
            QtWidgets.QMessageBox.about(self.ui, '提示', '当前没有历史记录')
        else:
            with open('历史记录.txt', 'a+', encoding='utf-8') as f:
                f.write('='*5 + self.getTimeSecond()+ '='*5 + '\r\n')
                f.write(history + '\r\n')
            QtWidgets.QMessageBox.about(self.ui, '提示', '历史记录保存成功')

if __name__ == '__main__':
    app = QtWidgets.QApplication([])
    simpleCalculator = SimpleCalculator()
    simpleCalculator.ui.show()
    app.exec_()

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
处女-大龙猫 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
王星星 + 2 + 1 谢谢@Thanks!
放肆的比奇丶 + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| zhooou 发表于 2020-6-6 17:35
处女-大龙猫 发表于 2020-6-6 15:57
打包的话使用pyinstaller
然后尽量使用-D打包指令, 小程序的话使用-F也可以, 不过-F很容易报错

好,我有空试试你说的方法,谢谢啦
 楼主| zhooou 发表于 2020-6-6 18:19
大兵马元帅 发表于 2020-6-6 15:30
你好,Python能不能做手机图形化界面

应该可以,我百度了一下,kivy这个库就是,不过实现起来效果怎么样就不清楚了,刚刚在github上找到个kivy的中文文档https://github.com/Kivy-CN/Kivy-CN,你要是感兴趣的话可以试试
头像被屏蔽
王星星 发表于 2020-6-6 15:26
大兵马元帅 发表于 2020-6-6 15:30
你好,Python能不能做手机图形化界面
处女-大龙猫 发表于 2020-6-6 15:57
打包的话使用pyinstaller
然后尽量使用-D打包指令, 小程序的话使用-F也可以, 不过-F很容易报错

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
zhooou + 1 + 1 谢谢@Thanks!

查看全部评分

处女-大龙猫 发表于 2020-6-6 17:38
zhooou 发表于 2020-6-6 17:35
好,我有空试试你说的方法,谢谢啦

尽量用-D(附带依赖打包成exe), 基本都能成功. -F(单独打包成单文件)很容易遇到问题.
有问题再交流
常胜将军 发表于 2020-6-6 18:15
个人感觉 计算器 对于一般来说也就是个加减乘除。
 楼主| zhooou 发表于 2020-6-6 18:25
常胜将军 发表于 2020-6-6 18:15
个人感觉 计算器 对于一般来说也就是个加减乘除。

是啊,对一般来说,加减乘除就够了,再高级点的就正弦余弦指数对数开方乘方之类的,(ps:突然发现咱俩注册时间一样诶,好巧啊哈哈哈哈)
常胜将军 发表于 2020-6-6 18:27
zhooou 发表于 2020-6-6 18:25
是啊,对一般来说,加减乘除就够了,再高级点的就正弦余弦指数对数开方乘方之类的,(ps:突然发现咱俩注 ...

果然注册时间一样。想当年得知注册消自在最后几分内注册成功。很是紧张和刺激啊。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 19:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表