day7-计算器

通过视频学习,学习了python中怎么实现一个计算器,主要运用了wxPython 库。原视频中是python2.7版本,我把它修改成了python3.6版本

学习视频链接如下:计算器

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后,窗口可根据大小自动调整, wx.VERTICAL, wx.HORIZONTAL
        boxsize = wx.BoxSizer(wx.VERTICAL)
        # 建grid便于放置控件
        gridBox = wx.GridSizer(rows=6, cols=5, hgap=1, vgap=1)
        self.equation = ""

        # 建计算器显示屏
        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))

        # 按钮数据
        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)

    # 创建按钮处理方法
    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)

    # 添加运算符与数字
    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'格式错误,请输入正确的等式!',
                                   u'请注意', wx.OK | wx.ICON_INFORMATION)
            dlg.ShowModal()
            dlg.Destroy()


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,115评论 25 707
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 2,985评论 1 3
  • 选择错了,真的就无能为力了吗 与清华相识,是在瑜伽课上,我们报了同一时间点的瑜伽练习。第一眼见清华感觉他是一个沉稳...
    猪一样的女子阅读 145评论 0 0
  • 去年年底说是有5个Test Stand需要运输,所以便开始揪心,到底应该怎么操作,才能顺利的把货运进来。 在此需...
    GRACE_QY阅读 403评论 0 1
  • 我不会写诗,我只是 将月亮、炊烟、河流 还有鸡鸭鹅狗 装进我思乡的情怀 我不会写诗,我该做的 只是将那个扎马尾辫的...
    顽石不恭阅读 365评论 1 3