Python實(shí)現(xiàn)的簡(jiǎn)單計(jì)算器功能詳解
本文實(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ì)有所幫助。
- python實(shí)現(xiàn)簡(jiǎn)易版計(jì)算器
- Python實(shí)現(xiàn)簡(jiǎn)單的四則運(yùn)算計(jì)算器
- python 簡(jiǎn)易計(jì)算器程序,代碼就幾行
- 利用Tkinter(python3.6)實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器
- 基于python的Tkinter實(shí)現(xiàn)一個(gè)簡(jiǎn)易計(jì)算器
- Python設(shè)計(jì)實(shí)現(xiàn)的計(jì)算器功能完整實(shí)例
- 僅用50行代碼實(shí)現(xiàn)一個(gè)Python編寫(xiě)的計(jì)算器的教程
- Python只用40行代碼編寫(xiě)的計(jì)算器實(shí)例
- Python PyQt5實(shí)現(xiàn)的簡(jiǎn)易計(jì)算器功能示例
- python基于tkinter圖形化編程實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能
相關(guān)文章
Python datetime時(shí)間格式化去掉前導(dǎo)0
Python datetime時(shí)間格式化去掉前導(dǎo)0,在format string的%與flag之間,添加一個(gè)“-”即可2014-07-07使用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是一個(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-07python使用pyaudio錄音和格式轉(zhuǎn)化方式
這篇文章主要介紹了python使用pyaudio錄音和格式轉(zhuǎn)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05Python自動(dòng)安裝第三方庫(kù)的小技巧(pip使用詳解)
很多朋友私信小編Python安裝第三方庫(kù)安裝技巧,在這就不一一回復(fù)大家了,今天小編給大家分享一篇教程關(guān)于Python自動(dòng)安裝第三方庫(kù)的小技巧,本文以安裝plotly為例給大家詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧2021-05-05像線程一樣管理進(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-05Python深度學(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-10Python使用PEfile模塊實(shí)現(xiàn)分析PE文件
PeFile模塊是Python中一個(gè)強(qiáng)大的便攜式第三方PE格式分析工具,用于解析和處理Windows可執(zhí)行文件,本文主要就來(lái)講講如何使用PEfile模塊實(shí)現(xiàn)分析PE文件,需要的可以參考下2023-08-08