欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)的簡(jiǎn)單計(jì)算器功能詳解

 更新時(shí)間:2018年08月25日 11:44:27   作者:Kedi  
這篇文章主要介紹了Python實(shí)現(xiàn)的簡(jiǎn)單計(jì)算器功能,結(jié)合實(shí)例形式詳細(xì)分析了Python實(shí)現(xiàn)計(jì)算器功能的具體步驟、相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python實(shí)現(xiàn)的簡(jiǎn)單計(jì)算器功能。分享給大家供大家參考,具體如下:

使用python編寫(xiě)一款簡(jiǎn)易的計(jì)算器


計(jì)算器效果圖

首先搭建計(jì)算器的面板:


計(jì)算器面板結(jié)構(gòu)

建造一個(gè)繼承于wx.Frame的frame,在init屬性函數(shù)中搭建面板

class CalcFrame(wx.Frame):#建造一個(gè)繼承于wx.Frame的frame
  def __init__(self,title):
    wx.Frame.__init__ (self,None,-1,title,
              pos=(100,300),size=(300,320))
    panel=wx.Panel(self)
    boxsize=wx.BoxSizer(wx.VERTICAL)
    gridBox=wx.GridSizer(4,4,1,1)
    self.equation=""#記錄一個(gè)等式,把它print到TextCtrl中

建立計(jì)算機(jī)顯示屏TextCtrl

    self.textprint=wx.TextCtrl(panel,-1,'',style=wx.TE_RIGHT|wx.TE_READONLY)#文本控制控件
    self.bgFont=wx.Font(25,wx.SWISS,wx.NORMAL,wx.BOLD,face=u'Roboto')#設(shè)置字體樣式
    self.textprint.SetFont(self.bgFont)#使用SetFont將設(shè)置的字體樣式運(yùn)用在textprint中
    self.textprint.SetForegroundColour('black')#設(shè)置前景色
    self.textprint.SetBackgroundColour('white')#設(shè)置后景色

按鈕

    self.buttonData="7 8 9 DEL 4 5 6 AC 1 2 3 * / + - =".split()
    #產(chǎn)生buttonIterm的label
    #將label分配到按鈕上去
    buttonLength=len(self.buttonData)
    for i in range(buttonLength):
      labels="%s" %self.buttonData[i]
      buttonIterm = wx.Button(panel,i,labels)
      self.createHandler(buttonIterm,labels)
      gridBox.Add(buttonIterm,0,flag=wx.EXPAND)

將textprint與buttonIterm放入boxsize中,再將將boxsize放入panel里

    boxsize.Add(self.textprint,1,flag=wx.EXPAND)#在boxsize中加上文本控制控件,比例為1
    boxsize.Add(gridBox,5,flag=wx.EXPAND)
    panel.SetSizerAndFit(boxsize)#將boxsize放入panel里

創(chuàng)建不同按鈕觸發(fā)的不同函數(shù)

  def createHandler(self,button,labels):
    #self.Bind(wx.EVT_BUTTON, self.OnButton1, self.Button1)
    #這里self是一個(gè)Frame(wxPython中的窗體這樣的東西),而B(niǎo)utton1是放在這個(gè)Frame下面的一個(gè)Button,self.OnButton1就是事件處理函數(shù)。而wxPython定死了事件處理函數(shù)的形式:
    items="DEL AC ="
    if labels not in items:
      self.Bind(wx.EVT_BUTTON,self.OnAppend,button)
    elif labels=='DEL':
      self.Bind(wx.EVT_BUTTON,self.OnDel,button)
    elif labels=='AC':
      self.Bind(wx.EVT_BUTTON,self.OnAc,button)
    elif labels=='=':
      self.Bind(wx.EVT_BUTTON,self.OnEqual,button)

不同函數(shù)的具體執(zhí)行過(guò)程

  def OnAppend(self,event):
    eventbutton = event.GetEventObject()
    label = eventbutton.GetLabel()
    self.equation += label
    self.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 OnEqual(self,event):
    string=self.equation
    try:
      taget=eval(string)#執(zhí)行這段代碼得到的結(jié)果
      self.equation=str(taget)
      self.textprint.SetValue(self.equation)
    except SyntaxError:#彈出消息對(duì)話框
      dlg=wx.MessageDialog(self,u'輸入格式錯(cuò)誤',wx.Ok|wx.ICON_INFORMATION)
      dlg.ShowModal()
      dlg.Destory()

APP類

class App(wx.App):
  def OnInit(self):
    self.frame =CalcFrame(u'計(jì)算器')
    self.frame.Center()
    self.frame.Show()
    return True

測(cè)試代碼:

if __name__=="__main__":
  app=App()
  app.MainLoop()

完整示例代碼如下:

# -*- coding:utf-8 -*-
'''
Created on 2018年8月25日
@author: Administrator
'''
import wx
class CalcFrame(wx.Frame):#建造一個(gè)繼承于wx.Frame的frame
  def __init__(self,title):
    wx.Frame.__init__ (self,None,-1,title,
              pos=(100,300),size=(300,320))
    panel=wx.Panel(self)
    boxsize=wx.BoxSizer(wx.VERTICAL)
    gridBox=wx.GridSizer(4,4,1,1)
    self.equation=""#記錄一個(gè)等式,把它print到TextCtrl中
    self.textprint=wx.TextCtrl(panel,-1,'',style=wx.TE_RIGHT|wx.TE_READONLY)#文本控制控件
    self.bgFont=wx.Font(25,wx.SWISS,wx.NORMAL,wx.BOLD,face=u'Roboto')#設(shè)置字體樣式
    self.textprint.SetFont(self.bgFont)#使用SetFont將設(shè)置的字體樣式運(yùn)用在textprint中
    self.textprint.SetForegroundColour('black')#設(shè)置前景色
    self.textprint.SetBackgroundColour('white')#設(shè)置后景色
    self.buttonData="7 8 9 DEL 4 5 6 AC 1 2 3 * / + - =".split()
    #產(chǎn)生buttonIterm的label
    #將label分配到按鈕上去
    buttonLength=len(self.buttonData)
    for i in range(buttonLength):
      labels="%s" %self.buttonData[i]
      buttonIterm = wx.Button(panel,i,labels)
      self.createHandler(buttonIterm,labels)
      gridBox.Add(buttonIterm,0,flag=wx.EXPAND)
    boxsize.Add(self.textprint,1,flag=wx.EXPAND)#在boxsize中加上文本控制控件,比例為1
    boxsize.Add(gridBox,5,flag=wx.EXPAND)
    panel.SetSizerAndFit(boxsize)#將boxsize放入panel里
  def createHandler(self,button,labels):
    #self.Bind(wx.EVT_BUTTON, self.OnButton1, self.Button1)
    #這里self是一個(gè)Frame(wxPython中的窗體這樣的東西),而B(niǎo)utton1是放在這個(gè)Frame下面的一個(gè)Button,self.OnButton1就是事件處理函數(shù)。而wxPython定死了事件處理函數(shù)的形式:
    items="DEL AC ="
    if labels not in items:
      self.Bind(wx.EVT_BUTTON,self.OnAppend,button)
    elif labels=='DEL':
      self.Bind(wx.EVT_BUTTON,self.OnDel,button)
    elif labels=='AC':
      self.Bind(wx.EVT_BUTTON,self.OnAc,button)
    elif labels=='=':
      self.Bind(wx.EVT_BUTTON,self.OnEqual,button)
  def OnAppend(self,event):
    eventbutton = event.GetEventObject()
    label = eventbutton.GetLabel()
    self.equation += label
    self.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 OnEqual(self,event):
    string=self.equation
    try:
      taget=eval(string)#執(zhí)行這段代碼得到的結(jié)果
      self.equation=str(taget)
      self.textprint.SetValue(self.equation)
    except SyntaxError:#彈出消息對(duì)話框
      dlg=wx.MessageDialog(self,u'輸入格式錯(cuò)誤',wx.Ok|wx.ICON_INFORMATION)
      dlg.ShowModal()
      dlg.Destory()
class App(wx.App):
  def OnInit(self):
    self.frame =CalcFrame(u'計(jì)算器')
    self.frame.Center()
    self.frame.Show()
    return True
if __name__=="__main__":
  app=App()
  app.MainLoop()

PS:這里再為大家推薦幾款計(jì)算工具供大家進(jìn)一步參考借鑒:

在線一元函數(shù)(方程)求解計(jì)算工具:
http://tools.jb51.net/jisuanqi/equ_jisuanqi

科學(xué)計(jì)算器在線使用_高級(jí)計(jì)算器在線計(jì)算:
http://tools.jb51.net/jisuanqi/jsqkexue

在線計(jì)算器_標(biāo)準(zhǔn)計(jì)算器:
http://tools.jb51.net/jisuanqi/jsq

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 如何在scrapy中捕獲并處理各種異常

    如何在scrapy中捕獲并處理各種異常

    這篇文章主要介紹了如何在scrapy中捕獲并處理各種異常,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python datetime時(shí)間格式化去掉前導(dǎo)0

    Python datetime時(shí)間格式化去掉前導(dǎo)0

    Python datetime時(shí)間格式化去掉前導(dǎo)0,在format string的%與flag之間,添加一個(gè)“-”即可
    2014-07-07
  • 使用python實(shí)現(xiàn)下拉選擇框和頁(yè)簽的方法

    使用python實(shí)現(xiàn)下拉選擇框和頁(yè)簽的方法

    ttk是Python中的一個(gè)模塊,它提供了一組用于創(chuàng)建GUI界面的工具和控件,這些控件包括按鈕、標(biāo)簽、文本框等,可以幫助開(kāi)發(fā)者更方便地創(chuàng)建用戶界面,這篇文章主要介紹了使用python實(shí)現(xiàn)下拉選擇框和頁(yè)簽的方法,需要的朋友可以參考下
    2023-03-03
  • 在PyTorch中實(shí)現(xiàn)高效的多進(jìn)程并行處理

    在PyTorch中實(shí)現(xiàn)高效的多進(jìn)程并行處理

    PyTorch是一個(gè)流行的深度學(xué)習(xí)框架,一般情況下使用單個(gè)GPU進(jìn)行計(jì)算時(shí)是十分方便的,但是當(dāng)涉及到處理大規(guī)模數(shù)據(jù)和并行處理時(shí),需要利用多個(gè)GPU,所以這篇文章我們將介紹如何利用torch.multiprocessing模塊,在PyTorch中實(shí)現(xiàn)高效的多進(jìn)程處理,需要的朋友可以參考下
    2024-07-07
  • python使用pyaudio錄音和格式轉(zhuǎn)化方式

    python使用pyaudio錄音和格式轉(zhuǎn)化方式

    這篇文章主要介紹了python使用pyaudio錄音和格式轉(zhuǎn)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • python文件的讀取、寫(xiě)入與刪除

    python文件的讀取、寫(xiě)入與刪除

    文件是無(wú)處不在的,,無(wú)論我們使用哪種編程語(yǔ)言,處理文件對(duì)于每個(gè)程序員都是必不可少的,下面這篇文章主要給大家介紹了關(guān)于python文件的讀取、寫(xiě)入與刪除的相關(guān)資料,文中通過(guò)實(shí)例代碼和圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Python自動(dòng)安裝第三方庫(kù)的小技巧(pip使用詳解)

    Python自動(dòng)安裝第三方庫(kù)的小技巧(pip使用詳解)

    很多朋友私信小編Python安裝第三方庫(kù)安裝技巧,在這就不一一回復(fù)大家了,今天小編給大家分享一篇教程關(guān)于Python自動(dòng)安裝第三方庫(kù)的小技巧,本文以安裝plotly為例給大家詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • 像線程一樣管理進(jìn)程的Python multiprocessing庫(kù)

    像線程一樣管理進(jìn)程的Python multiprocessing庫(kù)

    multiprocessing庫(kù)是基于threading API,它可以把工作劃分為多個(gè)進(jìn)程.有些情況下,multiprocessing可以作為臨時(shí)替換取代threading來(lái)利用多個(gè)CPU內(nèi)核,相應(yīng)地避免Python全局解釋器鎖所帶來(lái)的計(jì)算瓶頸.本文詳細(xì)介紹了Python multiprocessing庫(kù),需要的朋友可以參考下
    2021-05-05
  • Python深度學(xué)習(xí)pytorch神經(jīng)網(wǎng)絡(luò)塊的網(wǎng)絡(luò)之VGG

    Python深度學(xué)習(xí)pytorch神經(jīng)網(wǎng)絡(luò)塊的網(wǎng)絡(luò)之VGG

    雖然AlexNet證明深層神經(jīng)網(wǎng)絡(luò)卓有成效,但它沒(méi)有提供一個(gè)通用的模板來(lái)指導(dǎo)后續(xù)的研究人員設(shè)計(jì)新的網(wǎng)絡(luò)。下面,我們將介紹一些常用于設(shè)計(jì)深層神經(jīng)網(wǎng)絡(luò)的啟發(fā)式概念
    2021-10-10
  • Python使用PEfile模塊實(shí)現(xiàn)分析PE文件

    Python使用PEfile模塊實(shí)現(xiàn)分析PE文件

    PeFile模塊是Python中一個(gè)強(qiáng)大的便攜式第三方PE格式分析工具,用于解析和處理Windows可執(zhí)行文件,本文主要就來(lái)講講如何使用PEfile模塊實(shí)現(xiàn)分析PE文件,需要的可以參考下
    2023-08-08

最新評(píng)論