起源:

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

1、源代码(Python 2.7):

  1. # encoding: UTF-8
  2.  
  3. from Tkinter import *
  4. from ttk import *
  5.  
  6. calc = Tk()
  7. calc.title('计算器')
  8. calc.resizable(False, False)
  9.  
  10. buttons = [
  11. '', '', '', '*', 'C',
  12. '', '', '', '/', 'Neg',
  13. '', '', '', '-', '$',
  14. '', '.', '=', '+', '@']
  15.  
  16. # set up GUI
  17. row = 1
  18. col = 0
  19. style = Style()
  20. style.configure('BW.TButton', padding=12)
  21. for i in buttons:
  22. action = lambda x=i: click_event(x)
  23. Button(calc, text=i, width=7, command=action, style='BW.TButton') \
  24. .grid(row=row, column=col, sticky='nesw', )
  25. col += 1
  26. if col > 4:
  27. col = 0
  28. row += 1
  29.  
  30. display = Entry(calc, width=60)
  31. display.grid(row=0, column=0, columnspan=5)
  32.  
  33. calc.update()
  34. w = calc.winfo_reqwidth()
  35. h = calc.winfo_reqheight()
  36. s_w = calc.winfo_screenwidth()
  37. s_h = calc.winfo_screenheight()
  38. calc.geometry('%dx%d+%d+%d' % (w, h, (s_w - w) / 2, (s_h - h) / 2))
  39.  
  40. display.focus_set()
  41.  
  42. def click_event(key):
  43. # = -> calculate results
  44. if key == '=':
  45. # safeguard against integer division
  46. if '/' in display.get() and '.' not in display.get():
  47. display.insert(END, '.0')
  48.  
  49. # attempt to evaluate results
  50. try:
  51. result = eval(display.get())
  52. display.insert(END, ' = ' + str(result))
  53. except:
  54. display.insert(END, ' Error, use only valid chars')
  55.  
  56. # C -> clear display
  57. elif key == 'C':
  58. display.delete(0, END)
  59.  
  60. # $ -> clear display
  61. elif key == '$':
  62. display.delete(0, END)
  63. display.insert(END, '$$$$C.$R.$E.$A.$M.$$$$')
  64.  
  65. # @ -> clear display
  66. elif key == '@':
  67. display.delete(0, END)
  68. display.insert(END, 'website')
  69.  
  70. # neg -> negate term
  71. elif key == 'Neg':
  72. if '=' in display.get():
  73. display.delete(0, END)
  74. try:
  75. if display.get()[0] == '-':
  76. display.delete(0)
  77. else:
  78. display.insert(0, '-')
  79. except IndexError:
  80. pass
  81.  
  82. # clear display and start new input
  83. else:
  84. if '=' in display.get():
  85. display.delete(0, END)
  86. display.insert(END, key)
  87.  
  88. # RUNTIME
  89. calc.mainloop()

2、生成exe

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

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

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

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

Python: Tkinter、ttk编程之计算器的更多相关文章

  1. python -Tkinter 实现一个小计算器功能

    文章来源:http://www.cnblogs.com/Skyyj/p/6618739.html 本代码是基于python 2.7的 如果是对于python3.X  则需要将 tkinter 改为Tk ...

  2. Python GUI编程(TKinter)(简易计算器)

    搞课设搞得心累,现在看到人脸这两个字就烦躁,无聊搞搞tkinter,实现一个计算器的功能,能够简单的加减乘除. 简单的页面如下: 简单的代码如下: # encoding:utf-8 import tk ...

  3. Python GUI——tkinter菜鸟编程(中)

    8. Radiobutton 选项按钮:可以用鼠标单击方式选取,一次只能有一个选项被选取. Radiobutton(父对象,options,-) 常用options参数: anchor,bg,bitm ...

  4. Python的GUI编程(TK)

    TK在大多数 Unix平台.Windows平台和Macintosh系统都是预装好的,TKinter 模块是 Tk GUI 套件的标准Python接口.可实现Python的GUI编程. Tkinter模 ...

  5. Python Tkinter 学习成果:点歌软件music

    笔者工作业余时间也没什么爱好,社交圈子也小,主要娱乐就是背着自己带电瓶的卖唱音响到住地附近找个人多的位置唱唱KtV. 硬件上点歌就用笔记本电脑,歌曲都是网上下载的mkv格式的含有两个音轨的视频.因此点 ...

  6. Python 黑帽编程大纲(变化中)

    Python 黑帽编程大纲(预览版) 教程说明: 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and Defense with Pytho ...

  7. Python黑帽编程 3.4 跨越VLAN

    Python黑帽编程 3.4 跨域VLAN VLAN(Virtual Local Area Network),是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个VALN,也可以跨越物理 ...

  8. Python黑帽编程1.1虚拟机安装和配置 Kali Linux 2016

    Python黑帽编程1.1虚拟机安装和配置 Kali Linux 2016 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Att ...

  9. Python黑帽编程1.2 基于VS Code构建Python开发环境

    Python黑帽编程1.2  基于VS Code构建Python开发环境 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Atta ...

随机推荐

  1. SAFESEH 映像是不安全的

    1.打开该项目的“属性页”对话框 2.然后单击“链接器”--“命令行”,出现如下界面 3.将 /SAFESEH:NO 复制到“其它选项(D)”框中,然后点击应用 返回VS2013,重新编译运行程序即可 ...

  2. 6.5 Shell 算术计算

    6.5 Shell Arithmetic shell允许在其内计算表达式,可以通过以下方式使用:((中,let和带-i选项的declare命令中. 只能计算固定长度的整数,而且不会检查溢出,除0可以捕 ...

  3. Spring STS Call Hierarchy 查找不到被调用的信息

    今天使用Spring的STS的时候,发现Call  Hierarchy无法使用,很奇怪,发现问题出现在同一个工作区间里,如果工作区间不在此工作区间,发现还是可以找到被调用的信息的.当时在网上找也没找到 ...

  4. 简单几步手工扩容LVM(笔记)

    参考文档:https://www.cnblogs.com/einyboy/archive/2012/05/31/2528661.html 1.查看磁盘是否被系统认出: fdisk -l 如显示加的磁盘 ...

  5. webkit内核自定义隐藏滚动条

    1,在主页面可以拿到iframe,也可以为iframe注册onload等事件.document.getElementById('iframeId').onload 2,在主页面操作其中的iframe的 ...

  6. C++ CBitmap,HBitmap,Bitmap区别及联系

    加载一位图,可以使用LoadImage: HANDLE LoadImage(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,int cxDesired,int ...

  7. 3DMAX 批量 场景 对象 导出 .X格式 脚本

    一.首先你需要下载一个 Total Commader文件管理软件.利用这个软件你可以收集文件夹下包含子文件夹下的max文件(或完整路径)打开TotalCMD后使用查找文件:(如图红框中的操作)1. 2 ...

  8. Redis Cluster 添加/删除 完整折腾步骤

    Redis还是挺好玩的,今天测试了集群的添加.删除节点.重分配slot等.更深入的理解redis的游戏规则.步骤繁多,但是详细. 环境解释: 我是在一台Centos 6.9上测试的,各个redis节点 ...

  9. pyhton笔记(一):字符编码、变量

    一.什么是python? python是一种面向对象.解释型的计算机语言,它的特点是语法简洁.优雅.简单易学. 编译型语言: 写好代码之后把代码编译成二进制文件,运行时运行编译好的二进制文件.比如C. ...

  10. MyBatis数据库连接的基本使用

    MyBatis部分: 本部分内容只主要体现Mybatis的特点. (1)MyBatis是什么? 开源的持久层框架,MyBatis的底层仍然是JDBC (2)编程步骤 step1 Maven项目 pom ...