Python 에서 실 현 된 간단 한 계산기 기능 에 대한 상세 한 설명

7781 단어 Python계산기
이 글 의 실례 는 Python 이 실현 한 간단 한 계산기 기능 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
python 을 사용 하여 간단 하고 쉬 운 계산 기 를 만 듭 니 다.

계산기 효과 도
먼저 계산기 의 패 널 을 만 듭 니 다.

계산기 패 널 구조wx.Frame에 계승 되 는 frame 을 만 들 고 init 속성 함수 에 패 널 을 만 듭 니 다.

class CalcFrame(wx.Frame):#       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=""#      ,  print TextCtrl 

컴퓨터 디 스 플레이 만 들 기 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')#      
    self.textprint.SetFont(self.bgFont)#  SetFont           textprint 
    self.textprint.SetForegroundColour('black')#     
    self.textprint.SetBackgroundColour('white')#     

버튼

    self.buttonData="7 8 9 DEL 4 5 6 AC 1 2 3 * / + - =".split()
    #  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 와 button Iterm 을 box size 에 넣 고 box size 를 panel 에 넣 습 니 다.

    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   Frame(wxPython         ), Button1     Frame     Button,self.OnButton1        。 wxPython            :
    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)#           
      self.equation=str(taget)
      self.textprint.SetValue(self.equation)
    except SyntaxError:#       
      dlg=wx.MessageDialog(self,u'      ',wx.Ok|wx.ICON_INFORMATION)
      dlg.ShowModal()
      dlg.Destory()

APP 류

class App(wx.App):
  def OnInit(self):
    self.frame =CalcFrame(u'   ')
    self.frame.Center()
    self.frame.Show()
    return True

테스트 코드:

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

전체 예제 코드 는 다음 과 같 습 니 다.

# -*- coding:utf-8 -*-
'''
Created on 2018 8 25 
@author: Administrator
'''
import wx
class CalcFrame(wx.Frame):#       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=""#      ,  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')#      
    self.textprint.SetFont(self.bgFont)#  SetFont           textprint 
    self.textprint.SetForegroundColour('black')#     
    self.textprint.SetBackgroundColour('white')#     
    self.buttonData="7 8 9 DEL 4 5 6 AC 1 2 3 * / + - =".split()
    #  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   Frame(wxPython         ), Button1     Frame     Button,self.OnButton1        。 wxPython            :
    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)#           
      self.equation=str(taget)
      self.textprint.SetValue(self.equation)
    except SyntaxError:#       
      dlg=wx.MessageDialog(self,u'      ',wx.Ok|wx.ICON_INFORMATION)
      dlg.ShowModal()
      dlg.Destory()
class App(wx.App):
  def OnInit(self):
    self.frame =CalcFrame(u'   ')
    self.frame.Center()
    self.frame.Show()
    return True
if __name__=="__main__":
  app=App()
  app.MainLoop()

PS:여기 서 여러분 께 몇 가지 계산 도 구 를 추천 하여 참고 하 시기 바 랍 니 다.
온라인 일원 함수(방정식)구 해 계산 도구:
http://tools.jb51.net/jisuanqi/equ_jisuanqi
과학 계산기 온라인 사용고급 계산기 온라인 계산:
http://tools.jb51.net/jisuanqi/jsqkexue
온라인 계산기표준 계산기:
http://tools.jb51.net/jisuanqi/jsq
더 많은 파 이 썬 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기