python大作业

本次设计用Pycharm开发工具,Python语言进行主要功能是基于图形用户面的多功能。该计算器的主要功能是加、减、乘、除等常规运算以及指数,对数,三角函数等科学运算功能。该计算器分为数据输入模块和运算规则选择模块以及过程和结果显示模块三个模块。

第一种方法

该方法较简单。
代码如下:

# -*- coding:utf-8 -*-
import wxclass MyFrame(wx.Frame):def __init__(self, parent):wx.Frame.__init__(self, parent, id=100, title='计算器', size=(250, 350)) #初始化界面窗口panel = wx.Panel(self)# 创建文本框self.entry = wx.TextCtrl(panel, id=15, pos=(10, 0), size=(195, 28), style=wx.TE_RIGHT) #定义文本框的属性#创建按钮self.b_clear = wx.Button(parent=panel, id=10, label='C', pos=(10, 30), size=(45, 45)) #定义计算器的各个按钮,label是名称,pos是位置,size是按钮的大小self.b_divide = wx.Button(parent=panel, id=11, label='/', pos=(60, 30), size=(45, 45))self.b_multiply = wx.Button(parent=panel, id=12, label='*', pos=(110, 30), size=(45, 45))self.b_backspace = wx.Button(parent=panel, id=13, label='←', pos=(160, 30), size=(45, 45))self.b_sub = wx.Button(parent=panel, id=14, label='-', pos=(160, 80), size=(45, 45))self.b_add = wx.Button(parent=panel, id=15, label='+', pos=(160, 130), size=(45, 45))self.b_point = wx.Button(parent=panel, id=16, label='.', pos=(110, 230), size=(45, 45))self.b_equal = wx.Button(parent=panel, id=17, label='=', pos=(160, 180), size=(45, 95))self.b_zero = wx.Button(parent=panel, id=0, label='0', pos=(10, 230), size=(95, 45))self.b_seven = wx.Button(parent=panel, id=7, label='7', pos=(10, 80), size=(45, 45))self.b_eight = wx.Button(parent=panel, id=8, label='8', pos=(60, 80), size=(45, 45))self.b_nine = wx.Button(parent=panel, id=9, label='9', pos=(110, 80), size=(45, 45))self.b_six = wx.Button(parent=panel, id=6, label='6', pos=(110, 130), size=(45, 45))self.b_five = wx.Button(parent=panel, id=5, label='5', pos=(60, 130), size=(45, 45))self.b_four = wx.Button(parent=panel, id=4, label='4', pos=(10, 130), size=(45, 45))self.b_three = wx.Button(parent=panel, id=3, label='3', pos=(110, 180), size=(45, 45))self.b_two = wx.Button(parent=panel, id=2, label='2', pos=(60, 180), size=(45, 45))self.b_one = wx.Button(parent=panel, id=1, label='1', pos=(10, 180), size=(45, 45))#创建捆绑事件self.b_one.Bind(wx.EVT_BUTTON, self.B_one, self.b_one) #使用wx.Bind将按钮和事件捆绑起来self.b_two.Bind(wx.EVT_BUTTON, self.B_two, self.b_two)self.b_three.Bind(wx.EVT_BUTTON, self.B_three, self.b_three)self.b_four.Bind(wx.EVT_BUTTON, self.B_four, self.b_four)self.b_five.Bind(wx.EVT_BUTTON, self.B_five, self.b_five)self.b_six.Bind(wx.EVT_BUTTON, self.B_six, self.b_six)self.b_seven.Bind(wx.EVT_BUTTON, self.B_seven, self.b_seven)self.b_eight.Bind(wx.EVT_BUTTON, self.B_eight, self.b_eight)self.b_nine.Bind(wx.EVT_BUTTON, self.B_nine, self.b_nine)self.b_zero.Bind(wx.EVT_BUTTON, self.B_zero, self.b_zero)self.b_divide.Bind(wx.EVT_BUTTON, self.B_divide, self.b_divide)self.b_clear.Bind(wx.EVT_BUTTON, self.B_clear, self.b_clear)self.b_multiply.Bind(wx.EVT_BUTTON, self.B_multiply, self.b_multiply)self.b_backspace.Bind(wx.EVT_BUTTON, self.B_backspace, self.b_backspace)self.b_sub.Bind(wx.EVT_BUTTON, self.B_sub, self.b_sub)self.b_add.Bind(wx.EVT_BUTTON, self.B_add, self.b_add)self.b_equal.Bind(wx.EVT_BUTTON, self.B_equal, self.b_equal)self.b_point.Bind(wx.EVT_BUTTON, self.B_point, self.b_point)
#创建按钮点击事件def B_one(self,event): #创建捆绑的事件self.entry.AppendText("1")def B_two(self, event):self.entry.AppendText("2")def B_three(self, event):self.entry.AppendText("3")def B_four(self, event):self.entry.AppendText("4")def B_five(self, event):self.entry.AppendText("5")def B_six(self, event):self.entry.AppendText("6")def B_seven(self, event):self.entry.AppendText("7")def B_eight(self, event):self.entry.AppendText("8")def B_nine(self, event):self.entry.AppendText("9")def B_zero(self, event):self.entry.AppendText("0")def B_point(self, event):self.entry.AppendText(".")def B_add(self, event):self.entry.AppendText("+")def B_sub(self, event):self.entry.AppendText("-")def B_multiply(self, event):self.entry.AppendText("*")def B_divide(self, event):self.entry.AppendText("/")def B_clear(self, event):self.entry.Clear()def B_backspace(self, event):input_len = len(self.entry.GetValue())self.entry.Remove(input_len - 1, input_len)def B_equal(self,event):try:pre_result = str(self.entry.GetValue())result = eval(pre_result)self.entry.SetValue(str(result))except:self.entry.SetValue("Error")if __name__ == '__main__':app = wx.App() MyFrame(None).Show() app.MainLoop() 

效果如下:

第二种方法

该方法较第一种复杂,但是实现的功能更多。
代码如下:

# -*- coding:utf-8 -*-
import wx
from math import *
class Calculator(wx.Frame):def __init__(self):wx.Frame.__init__(self, None, -1, "计算器", size=(350, 480),style=wx.DEFAULT_FRAME_STYLE ^ (wx.RESIZE_BORDER |wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX))panel = wx.Panel(self)boxsize = wx.BoxSizer(wx.VERTICAL)gridBox = wx.GridSizer(rows=6, cols=5, hgap=5, vgap=5)self.equation = ""  # 记录等式self.textprint = wx.TextCtrl(panel, -1, '', style=wx.TE_MULTILINE | wx.TE_READONLY)# 按钮数据self.buttonData = "% pi e ← C sqrt ^ ln log tan 7 8 9 cos sin  4 5 6 + - 1 2 3  * / 0 ( ) . =".split()buttonLength = len(self.buttonData) #使用循环来定义按钮的属性,简化代码for i in range(buttonLength):labels = "%s" % self.buttonData[i]buttonIterm = wx.Button(panel, i, labels, size=(63, 52))self.bangding(buttonIterm, labels) #调用绑定方法,减少重复性工作gridBox.Add(buttonIterm, 0, 0)boxsize.Add(self.textprint, 1, wx.EXPAND)boxsize.Add(gridBox, 5, wx.EXPAND)panel.SetSizerAndFit(boxsize)# 创建绑定方法def bangding(self, button, labels):item = "← C ="if labels not in item:self.Bind(wx.EVT_BUTTON, self.OnAppend, button)elif labels == '←':self.Bind(wx.EVT_BUTTON, self.OnDel, button)elif labels == 'C':self.Bind(wx.EVT_BUTTON, self.OnAc, button)elif labels == '=':self.Bind(wx.EVT_BUTTON, self.OnTarget, button)# 添加运算符与数字def OnAppend(self, event):eventbutton = event.GetEventObject()label = eventbutton.GetLabel()self.equation += labelself.textprint.SetValue(self.equation)def OnDel(self, event):self.equation = self.equation[:-1]self.textprint.SetValue(self.equation)def OnAc(self, event):self.textprint.Clear()self.equation = "" #将文本框的内容清空,实现归零def OnTarget(self, event):string = self.equationif '^' in string:string = string.replace('^', '**') #将指数符号进行转换,便于eval()函数进行识别try:target = eval(string)self.equation += '=' + str(target)self.textprint.SetValue(self.equation)except SyntaxError:dlg = wx.MessageDialog(self, '请输入正确的等式!', '请注意',wx.OK | wx.ICON_INFORMATION)dlg.ShowModal()dlg.Destroy()if __name__ == '__main__':app = wx.App()frame = Calculator()frame.Show()app.MainLoop()

效果如下:

详细实验报告:python实验报告文档

Python大作业——两种方法设计计算器(使用wx库)。相关推荐

  1. python画图-python画图的两种方法

    python如何画图?这里给大家介绍两款python绘图的库:turtle和Matplotlib. 1 安装turtle Python2安装命令:pip install turtule Python3 ...

  2. Python案例:两种方法实现词频统计

    Python案例:两种方法实现词频统计 一.利用字典实现词频统计 1.编写源代码 2.查看运行结果 二.利用collections的Counter模块实现词频统计 <

  3. php fseek函数,php fseek函数读取大文件两种方法

    php读取大文件,使用fseek函数是最为普遍的方式,它不需要将文件的内容全部读入内存,而是直接通过指针来操作,所以效率是相当高效的.在使用fseek来对文件进行操作时,也有多种不同的方法,效率可能也 ...

  4. Python 保存图片的两种方法

    有时我们需要保存我们的图片,那我们可以怎么保存呢? 可参考下列保存的两种方法: 第一种:cv2.imwrite() 示例: # 方法一 : import cv2 cv2.imwrite("i ...

  5. python爬虫:两种方法模拟登录博客园

    第一方法用第三方库(requests):参考http://www.mamicode.com/info-detail-1839685.html 源代码分析 博客园的登录页面非常简单,查看网页源代码,可以 ...

  6. python 日志输出模块--两种方法

    第一种方法:(推荐) import logging.handlersLOG_FILE = r'tst.log'handler = logging.handlers.RotatingFileHandle ...

  7. 【Python教程】两种方法教你拆分含有多种分隔符的字符串

    方法一:连续使用str.spilt()方法,每次处理一种分隔符: str.split()方法的应用:按某一种分隔符分割字符串: #不能用单词字符进行分割(字母.数字.下划线) A.str.split( ...

  8. ubuntu查看python版本-切换Ubuntu默认python版本的两种方法

    你可以按照以下方法使用 ls 命令来查看你的系统中都有那些 Python 的二进制文件可供使用. 1 2 $ls /usr/bin/python* /usr/bin/python /usr/bin/p ...

  9. python运行时间的两种方法

    第一种: ####################### import arcpy from arcpy import env import osimport sys import time #### ...

最新文章

  1. Cell子刊:特异靶向病原菌致病力的植物天然产物的作用机制
  2. jstatd,VisualVM使用和报错解决:Could not create remote object--java.security.AccessControlException
  3. 微信小程序之购物车功能
  4. 批处理文件中判断是否64位系统
  5. vue2路由移除#号(Apache)
  6. linux7配置开启防火墙,CentOS7防火墙设置
  7. 有效的数独Python解法
  8. 网络工程师需要哪些知识_成长工程师可以教给我们哪些工程知识
  9. Google Maps Android API v2 (2)- 地图对象
  10. android fragment 优势,Android Fragment详解
  11. UserCF、 KNN 和 TopK
  12. html css图片展开动画,9种CSS3炫酷图片预览展示动画特效
  13. 阿里云服务器租用收费标准(精准费用报价更新)
  14. 分享国内常用的免费MD5在线解密网站,这5个网站很实用
  15. Linux设备模型(1)_基本概念
  16. 2021年中国定制家具行业现状分析:“量身定制”需求逐年增加[图]
  17. Pycharm使用tkinter
  18. C#实现笔记本自带蓝牙与汇承HC-08(BLE)蓝牙模块通讯
  19. 乐山市计算机学校的董事长是,乐山市计算机学校开学典礼隆重举行
  20. 大数据方面的核心技术

热门文章

  1. 安卓手机拍照识别车牌号OCR sdk
  2. PHP函数集合-一揽子方案
  3. android大字体桌面,大字体桌面模式 酷派大神F2系统界面再曝光
  4. Bert模型-自然语言处理中的预训练技术发展史
  5. 网络工程师就是网管?网工版「10万个为什么」,快拿来吧你!
  6. 流水号函数rowNoInGroup()与groupMaxNumber()区别
  7. Jquery 刷新当前页面
  8. Proface触摸屏按钮互锁、弹出窗口、密码设置、报警设置案例
  9. mac终端远程登陆服务器
  10. CSS3-阴影nbsp;效果做成的立体图片效果