Python: UI编程之计算器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python: UI编程之计算器相关的知识,希望对你有一定的参考价值。

起源:

研究Python UI编程,我偏喜欢其原生组件,于是学习Tkinter、ttk组件用法。找一计算器开源代码,略加修整,以为备忘。
其界面如图所示:

技术分享

 

1、源代码(Python 2.7):

# encoding: UTF-8

from Tkinter import *
from ttk import *

calc = Tk()
calc.title(计算器)
calc.resizable(False, False)

buttons = [
    7, 8, 9, *, C,
    4, 5, 6, /, Neg,
    1, 2, 3, -, $,
    0, ., =, +, @]

# set up GUI
row = 1
col = 0
style = Style()
style.configure(BW.TButton, padding=12)
for i in buttons:
    action = lambda x=i: click_event(x)
    Button(calc, text=i, width=7, command=action, style=BW.TButton)         .grid(row=row, column=col, sticky=nesw, )
    col += 1
    if col > 4:
        col = 0
        row += 1

display = Entry(calc, width=60)
display.grid(row=0, column=0, columnspan=5)

calc.update()
w = calc.winfo_reqwidth()
h = calc.winfo_reqheight()
s_w = calc.winfo_screenwidth()
s_h = calc.winfo_screenheight()
calc.geometry(%dx%d+%d+%d % (w, h, (s_w - w) / 2, (s_h - h) / 2))

display.focus_set()

def click_event(key):
    # = -> calculate results
    if key == =:
        # safeguard against integer division
        if / in display.get() and . not in display.get():
            display.insert(END, .0)

        # attempt to evaluate results
        try:
            result = eval(display.get())
            display.insert(END,  =  + str(result))
        except:
            display.insert(END,    Error, use only valid chars)

            # C -> clear display
    elif key == C:
        display.delete(0, END)


    # $ -> clear display
    elif key == $:
        display.delete(0, END)
        display.insert(END, $$$$C.$R.$E.$A.$M.$$$$)


    # @ -> clear display
    elif key == @:
        display.delete(0, END)
        display.insert(END, website)


    # neg -> negate term
    elif key == Neg:
        if = in display.get():
            display.delete(0, END)
        try:
            if display.get()[0] == -:
                display.delete(0)
            else:
                display.insert(0, -)
        except IndexError:
            pass

            # clear display and start new input
    else:
        if = in display.get():
            display.delete(0, END)
        display.insert(END, key)


# RUNTIME
calc.mainloop()

 

 

2、生成exe

反复对比py2exe及PyInstaller,发现py2exe在x64位下不能支持生成一个exe文件,而其在x32下,对Tkinter,也不能生成一个文件。

费尽工夫,也只是少生成几个文件 ,甚为不爽:

技术分享

而用PyInstaller,可生成单一文件 。但验证其启动速度,甚为耗时:

技术分享

综合对比,Python做UI,实非方便之物,用其胶水语言之长处,足矣!

 


以上是关于Python: UI编程之计算器的主要内容,如果未能解决你的问题,请参考以下文章

面向面试编程代码片段之GC

Python 之 Socket编程(TCP/UDP)

python之模块和包

python 之函数式编程

PYTHON之计算机语言基础知识 —— 编程语言的分类

Python进阶之函数式编程