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,实非方便之物,用其胶水语言之长处,足矣!

时间: 2024-10-13 09:15:05

Python: UI编程之计算器的相关文章

《Python核心编程》 第五章 数字 - 课后习题

课后习题  5-1 整形. 讲讲 Python 普通整型和长整型的区别. 答:普通整型是绝大多数现代系统都能识别的. Python的长整型类型能表达的数值仅仅与你机器支持的(虚拟)内存大小有关. 5-2 运算符 (a) 写一个函数,计算并返回两个数的乘积 (b) 写一段代码调用这个函数,并显示它的结果 答: def pro(a,b): p = a*b return p a = int(raw_input("a=")) b = int(raw_input("b="))

深入浅出 Python 函数式编程

1.函数式编程的定义与由来 如果程序中的函数仅接受输入并产生输出,即输出只依赖于输入,数据不可变,避免保存程序状态,那么就称为函数式编程(Functional Programming,简称FP,又称泛函编程). 这种风格也称声明式编程(Declarative Programming),与之相对的是指令式编程(Imperative Programming),后者中的对象会不断修改自身状态.函数式编程强调程序的执行结果比执行过程更重要,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算

Python面向对象编程-封装

1引言 你点击了桌面上的Chrome图标,一个浏览器窗口出现了,输入网址就可以在Internet世界愉快玩耍.这一切是怎么实现的呢?Chromium这个多进程的程序是如何启动各个进程的呢?浏览器主进程(界面进程)启动了哪些线程?如何启动的呢?这些问题一直萦绕在心头,一起来看看源代码吧.本文主要针对Chromium for Mac的源代码,其它操作系统大同小异. 2背景知识 浏览器作为一个应用程序,是以进程的形式运行在操作系统上的.首先,Chromium是一个多进程的应用程序,我们需要了解Chro

Python gui编程pyQt5安装步骤

Python gui编程pyQt5安装步骤 ? ? ? ? pip install PyQt5 Pip3 install PyQt5 ? ? ? ? ? ? ? https://riverbankcomputing.com/software/pyqt/download5 ? ? ? ? ? 下载地址 ? http://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.4.1/PyQt5-5.4.1-gpl-Py3.4-Qt5.4.1-x64.exe

《Python核心编程》 第七章 映射和集合类型 - 习题

课后习题 7–1. 字典方法.哪个字典方法可以用来把两个字典合并到一起? 答: dict1 = {'1' :' python' } dict2 = {'2' :"hello" } dict1.update(dict2) dictAll = dict1 print dictAll Result: {'1': ' python', '2': 'hello'} 7–2. 字典的键.我们知道字典的值可以是任意的 Python 对象,那字典的键又如何呢?请试 着将除数字和字符串以外的其他不同类型

Python核心编程基础教程之Python运算符、运算符优先级、表达式简介--20150717

Python核心编程基础教程之Python运算符.运算符优先级.表达式简介 1.Python运算符与表达式: (1)认识Pyhton运算符1:什么是运算符 在Python运算中,有时候我们需要对一个或者多个数字或者一个或者多个字符串进行运算操作,*,+ (2)认识Pyhton运算符2:运算符有哪些以及运算符的使用方法 + :加 - :减 * :乘 / :除 ** :幂 < :小于 > :大于 != :不等于 // :求相除的整数部分 % :求相除的余数部分 & :按位与 | :按位或

Python自学编程开发路线图(文中有免费资源)

Python核心编程 免费视频资源<Python入门教程>:http://yun.itheima.com/course/145.html Python 基础学习大纲 所处阶段 主讲内容 技术要点 学习目标 第一阶段:python核心编程 计算机组成原理和开发环境 认识操作系统:认识python:开发环境pycharm 可掌握的核心能力:1.掌握基本的Linux系统操作:2.掌握Python基础编程语法:3.建立起编程思维和面向对象思想.可解决的现实问题:字符串排序,切割,逆置:猜数字.飞机大战

Python并发编程-事件驱动模型

 一.事件驱动模型介绍                                                                                                        1.传统的编程模式  例如:线性模式大致流程 开始--->代码块A--->代码块B--->代码块C--->代码块D--->......--->结束 每一个代码块里是完成各种各样事情的代码,但编程者知道代码块A,B,C,D...的执行顺序,唯一能

Python Socket 编程——聊天室演示样例程序

上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket 编程的理解. 聊天室程序需求 我们要实现的是简单的聊天室的样例,就是同意多个人同一时候一起聊天.每一个人发送的消息全部人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天.例如以下图: 图来自:http://www.ibm.com/developerworks/linux/tu