day7-計(jì)算器

通過視頻學(xué)習(xí),學(xué)習(xí)了python中怎么實(shí)現(xiàn)一個(gè)計(jì)算器,主要運(yùn)用了wxPython 庫。原視頻中是python2.7版本,我把它修改成了python3.6版本

學(xué)習(xí)視頻鏈接如下:計(jì)算器

wxPython庫安裝鏈接如下:wxPython各種版本的.whl和.zip文件

我安裝的是python3.6版本win64位的.whl
wxPython-4.0.0b2-cp36-cp36m-win_amd64.whl

代碼如下:


import wx
class CalcFrame(wx.Frame):
    def __init__(self, title):
        wx.Frame.__init__(self, None, -1, title, size=(300, 320),
                          style=wx.DEFAULT_FRAME_STYLE ^ (wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX))
        # 建立面板
        panel = wx.Panel(self)
        # 建sizer后,窗口可根據(jù)大小自動(dòng)調(diào)整, wx.VERTICAL, wx.HORIZONTAL
        boxsize = wx.BoxSizer(wx.VERTICAL)
        # 建grid便于放置控件
        gridBox = wx.GridSizer(rows=6, cols=5, hgap=1, vgap=1)
        self.equation = ""

        # 建計(jì)算器顯示屏
        self.textprint = wx.TextCtrl(panel, -1, '', style=wx.TE_RIGHT | wx.TE_READONLY)
        self.bgFont = wx.Font(pointSize=25, family=wx.FONTFAMILY_SWISS,
                                style=wx.FONTSTYLE_NORMAL, weight=wx.FONTWEIGHT_NORMAL)
        #在python2.7版本中 self.bgFont = wx.Font(25,wx.SWISS,wx.NORMAL,wx.BOLD,face=u"Roboto")
        self.textprint.SetFont(self.bgFont)
        self.textprint.SetBackgroundColour((210, 210, 210))
        self.textprint.SetForegroundColour((15, 15, 15))

        # 按鈕數(shù)據(jù)
        self.buttonData="7 8 9 DEL AC 4 5 6 * ÷ 1 2 3 + - 0 % pi e sqrt ^ sin cos tan log10 ln ( ) . =".split()

        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.Add(gridBox, 5, flag=wx.EXPAND)
        panel.SetSizerAndFit(boxsize)

    # 創(chuàng)建按鈕處理方法
    def createHandler(self, button, labels):
        item = "DEL AC ="
        if labels not in item:
            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.OnTarget, button)

    # 添加運(yùn)算符與數(shù)字
    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 OnTarget(self, event):
        string = self.equation
        if '^' in string:
            string = string.replace('^', '**')
        if 'ln' in string:
            string = string.replace('ln', 'log')
        try:
            target = eval(string)
            self.equation = str(target)
            self.textprint.SetValue(str(target))
        except SyntaxError:
            dlg = wx.MessageDialog(self, u'格式錯(cuò)誤,請(qǐng)輸入正確的等式!',
                                   u'請(qǐng)注意', wx.OK | wx.ICON_INFORMATION)
            dlg.ShowModal()
            dlg.Destroy()


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()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,881評(píng)論 25 709
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    小邁克閱讀 3,122評(píng)論 1 3
  • 選擇錯(cuò)了,真的就無能為力了嗎 與清華相識(shí),是在瑜伽課上,我們報(bào)了同一時(shí)間點(diǎn)的瑜伽練習(xí)。第一眼見清華感覺他是一個(gè)沉穩(wěn)...
    豬一樣的女子閱讀 172評(píng)論 0 0
  • 去年年底說是有5個(gè)Test Stand需要運(yùn)輸,所以便開始揪心,到底應(yīng)該怎么操作,才能順利的把貨運(yùn)進(jìn)來。 在此需...
    GRACE_QY閱讀 470評(píng)論 0 1
  • 我不會(huì)寫詩,我只是 將月亮、炊煙、河流 還有雞鴨鵝狗 裝進(jìn)我思鄉(xiāng)的情懷 我不會(huì)寫詩,我該做的 只是將那個(gè)扎馬尾辮的...
    頑石不恭閱讀 391評(píng)論 1 3

友情鏈接更多精彩內(nèi)容