这个是小米系统的计算器界面:

模仿了一下,高富帅的界面成屌丝了:

代码如下:

 
    #/usr/bin/python
    # coding: utf-8
       
    from Tkinter import *
       
    # 按键返回函数
    def call(num):
        content = display.get() + num
        display.set(content)
    # 使用eval 函数计算
    def calculate():
        try:
            content = display.get()
            result = eval(content)
            display.set(content + '=\n' + str(result))
        except:
            display.set('Error')
            clear()
    # 清空内容栏
    def clear():
        display.set('')
    # 删除前一个字符
    def backspace():
        display.set(str(display.get()[:-1]))
       
    def main():
        # 定义主窗口
        root = Tk()
        root.title('Calculator')
        root.geometry('210x200+300+400')
        # 将display定义成global,main() 函数外的call, calculate等可以调用
        global display
        display = StringVar()   
        # 设置内容显示栏,使用label,anchor是靠右,默认居中
        label = Label(root, relief = 'sunken', borderwidth = 3, anchor = SE)
        label.config(bg = 'grey', width = 25, height = 3)
        label['textvariable'] = display
        label.grid(row = 0, column = 0, columnspan = 4)
       
    #   text = Text(root, relief = 'sunken', borderwidth = 3)
    #   text.insert(INSERT, str(display))
    #   text.grid(row = 0, column = 0, columnspan = 4)
        # 添加各个按钮,并绑定行为,使用lambda很方便,是用的是grid布局
        Button(root, text = 'C', fg = '#EF7321', width = 3, command = lambda: clear()).grid(row = 1, column = 0)
        Button(root, text = 'DEL', width = 3, command = lambda:backspace()).grid(row = 1, column = 1)
           
        Button(root, text = '/', width = 3, command = lambda:call('/')).grid(row = 1, column = 2)
        Button(root, text = '*', width = 3, command = lambda:call('*')).grid(row = 1, column = 3)
        Button(root, text = '7', width = 3, command = lambda:call('7')).grid(row = 2, column = 0)
        Button(root, text = '8', width = 3, command = lambda:call('8')).grid(row = 2, column = 1)
        Button(root, text = '9', width = 3, command = lambda:call('9')).grid(row = 2, column = 2)
        Button(root, text = '-', width = 3, command = lambda:call('-')).grid(row = 2, column = 3)
        Button(root, text = '4', width = 3, command = lambda:call('4')).grid(row = 3, column = 0)
        Button(root, text = '5', width = 3, command = lambda:call('5')).grid(row = 3, column = 1)
        Button(root, text = '6', width = 3, command = lambda:call('6')).grid(row = 3, column = 2)
        Button(root, text = '+', width = 3, command = lambda:call('+')).grid(row = 3, column = 3)
        Button(root, text = '1', width = 3, command = lambda:call('1')).grid(row = 4, column = 0)
        Button(root, text = '2', width = 3, command = lambda:call('2')).grid(row = 4, column = 1)
        Button(root, text = '3', width = 3, command = lambda:call('3')).grid(row = 4, column = 2)
        Button(root, text = '=', width = 3, bg = '#EF7321', height = 3,command = lambda:calculate()).grid(row = 4, column = 3, rowspan = 2)
        Button(root, text = '0', width = 10, command = lambda:call('0')).grid(row = 5, column = 0, columnspan = 2)
        Button(root, text = '.', width = 3, command = lambda:call('.')).grid(row = 5, column = 2) 
       
        root.mainloop()
    if __name__ == '__main__':
        main()

源码git地址



blog comments powered by Disqus

Published

08 February 2014

Tags