太实用了!自己动手写软件——GUI编程
这几天我有一个想法就是将我之前做测试写的一些协议脚本(如:ssh、FTP、SMTP、MySQL、Oracle等)综合在一起做一个密码PJ器,这么多的协议放在一起,每个协议都有自己特殊的参数,如果还是和之前我们的方式一起通过命令行输入的方式未免就太麻烦了。但是如果提供一个软件界面,将不同的协议作为选择项,不同协议需要不同的参数,这样一个相对方便的密码PJ软件是不是就好了呢。
出于这样的考虑,今天我们看一下图形用户界面(Graphical User Interface,GUI)编程,看了一下网上python的GUI编码库有很多,但是tkinter是内置库,所以我们还是选择这个内置库作为我们的工具对象了。我们今天就来学习一下tkinter的使用。后面几天我们也将持续更新我们密码PJ工具的完成过程,有兴趣的小伙伴可以和菜鸟小白一起每天完成一部分内容,最终自己完成一个软件的编写。
GUI编码流程
将你的GUI程序启动和运行起来一般需要以下五个步骤:
- 导入模块,我们使用的就是import tkinter(或者from tkinter import *) 
- 创建一个顶层窗口,用于放置所有的组件 
- 在顶层窗口的上面构建不同的GUI组件 
- 通过底层的应用代码将这些GUI组件连接起来 
- 进入主事件循环 
安装和使用
好了,回归正题,看看我们今天需要学习的tkinter,因为是内置库,所以我们不需要安装直接调用即可。
python3对tkinter库进行了改写,两者的导入方式存在差异
python2导入:
import Tkinter
python3导入:
import tkinter
窗口
我们使用GUI编程,都需要新建一个顶层框架,就好像是画家在画画,我们先要拿出一张纸来承载画家的绘画内容。我们新建的这个顶层框架也是一样,用来盛放所有的GUI组件(如:按钮(Button)、文本输入框(Entry)、菜单(Menu))。我们新建的方式一般是这样的。
import tkinter
window = tkinter.Tk()#创建一个主窗口
控件
当前tkinter一共有这么几种控件,我们先看看每一个控件的类型,然后我们再抽一些常用的控件来写一些示例
| 控件 | 描述 | 
|---|---|
| Button | 按钮控件;在程序中显示按钮,包含的事件如:鼠标悬浮、按下、释放以及键盘活动 | 
| Canvas | 画布控件;显示图形元素,如线条、椭圆、矩形等 | 
| Checkbutton | 多选框控件;用于在程序中提供多项选择框 | 
| Entry | 输入控件;用于显示简单的文本内容 | 
| Frame | 框架控件;在屏幕上显示一个矩形区域,多用来作为容器 | 
| Label | 标签控件;可以显示文本和位图 | 
| Listbox | 列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户 | 
| Menubutton | 菜单按钮控件,用于显示菜单项。 | 
| Menu | 菜单控件;显示菜单栏,下拉菜单和弹出菜单 | 
| Message | 消息控件;用来显示多行文本,与label比较类似 | 
| Radiobutton | 单选按钮控件;显示一个单选的按钮状态 | 
| Scale | 范围控件;显示一个数值刻度,为输出限定范围的数字区间 | 
| Scrollbar | 滚动条控件,当内容超过可视化区域时使用,如列表框。. | 
| Text | 文本控件;用于显示多行文本 | 
| Toplevel | 容器控件;用来提供一个单独的对话框,和Frame比较类似 | 
| Spinbox | 输入控件;与Entry类似,但是可以指定输入范围值 | 
| PanedWindow | PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。 | 
| LabelFrame | labelframe 是一个简单的容器控件。常用与复杂的窗口布局。 | 
| tkMessageBox | 用于显示你应用程序的消息框。 | 
Button控件
我们新建一个退出按钮,代码如下:
import tkinter
window = tkinter.Tk()#创建一个主窗口
window.title("密码PJ工具")#窗口标题
window.geometry("500x600")
quit = tkinter.Button(window,text="QUIT",command=window.quit())
quit.pack()
window.mainloop()
- 首先我们导入tkinter模块 
- 然后新建一个顶层窗口 
- 五六行是定义顶层窗口的标题和大小 
- 第八行是我们编写的Button控件,将其放置在window顶层框架上,显示的Button文字为“QUIT”,绑定了一个回调函数就是window.quit 
- 第九行就是将这个button控件采用pack方法放置,pack会将控件自动放置在合适的位置 
- 最后一行运行一个主函数 
 实现出来效果是这样的image- Label控件 - Label控件就相当于一个信息提供框。具体使用方法如下: 
import tkinter
window = tkinter.Tk()#创建一个主窗口
window.title("密码PJ工具")#窗口标题
window.geometry("500x600")
label = tkinter.Label(window,text="菜鸟小白的学习分享")
label.pack()
window.mainloop()
其它部分都是和Button内容是一致的,就是Label控件调用的Label函数,它没有回调函数,所以说它只是相当于一个信息提供框。
实现效果是这样的
Menu控件
Menu控件就是我们说的菜单栏,后面我们编写软件也是需要用到的。具体使用方法如下:
import tkinter
window = tkinter.Tk()#创建一个主窗口
window.title("密码PJ工具")#窗口标题
window.geometry("500x600")
menu = tkinter.Menu(window)
menu.add_command(label="开始PJ",command=print("开始PJ"))
menu.add_command(label="退出",command=window.quit)
window.config(menu=menu)
window.mainloop()
- 1-6行:和之前的一样,不做介绍
- 8行:创建一个Menu控件,并将控件放置在window上
- 9-10行:添加菜单内容和回调函数
- 11行:将menu控件配置生效在window顶层框架上
- 13行:进入主事件循环 
 最终实现效果是这样的- 好了,今天的内容就先聊到这里吧,有什么疑问可以在公众号添加菜鸟小白的微信,我们相互讨论。 
太实用了!自己动手写软件——GUI编程的更多相关文章
- 太实用了!自己动手写软件——SSH、FTP和SQL server的密码破解
		我们的密码破解工具一共分为如下六个部分,前面四个部分我们都有在之前的文章中介绍过了 用户图形界面——GUI编程 密码字典获取——Excel文件读取 数据库类——MySQL.Oracle和SQL ser ... 
- 太实用了!自己动手写软件——我们的密码PJ器终于完成了
		之前我们完成了密码破解工具的界面,今天我们来看看功能实现吧. 目录 编码 提交——功能实现 开始破解——功能实现 读取密码字典 选择协议并执行破解动作 POP3协议的破解函数 IMAP协议的破解函数 ... 
- 【原创】自己动手写工具----XSmartNote [Beta 3.0]
		一.前面的话 在动笔之前,一直很纠结到底要不要继续完成这个工具,因为上次给它码代码还是一年多之前的事情,参考自己动手写工具----XSmartNote [Beta 2.0],这篇博文里,很多园友提出了 ... 
- 【原创】自己动手写工具----XSmartNote [Beta 2.0]
		一.前面的话 在上一篇自己动手写工具----XSmartNote中,我简单介绍了这个小玩意儿的大致界面和要实现的功能,看了一下园子里的评论,评价褒贬不一,有人说“现在那么多云笔记的工具”,“极简版ev ... 
- 【转】自己动手写SC语言编译器
		自序 编译原理与技术的一整套理论在整个计算机科学领域占有相当重要的地位,学习它对程序设计人员有很大的帮助.我们考究历史会发现那些人人称颂的程序设 计大师都是编译领域的高手,像写出BASIC语言的BIL ... 
- 自己动手写 ASP.NET MVC 分页     part1
		学习编程也有一年半载了,从来没有自己动手写过东西,都是利用搜索软件找代码,最近偶发感慨,难道真的继续做码农??? 突发奇想是不是该自己动手写点东西,可是算法.逻辑思维都太弱了,只能copy网上的代码, ... 
- 自己动手写了第三阶段的处理器——教学OpenMIPS处理器蓝图
		我们会继续上传新书<自己动手写处理器>(未公布).今天是第十条.我每星期试试4 从本章開始将一步一步地实现教学版OpenMIPS处理器.本章给出了教学版OpenMIPS的系统蓝图,首先介绍 ... 
- 自己动手写CPU之第四阶段(3)——MIPS编译环境的建立
		将陆续上传本人写的新书<自己动手写CPU>(尚未出版).今天是第13篇.我尽量每周四篇 4.4 MIPS编译环境的建立 OpenMIPS处理器在设计的时候就计划与MIPS32指令集架构兼容 ... 
- 动手写一个简单版的谷歌TPU-指令集
		系列目录 谷歌TPU概述和简化 基本单元-矩阵乘法阵列 基本单元-归一化和池化(待发布) TPU中的指令集 SimpleTPU实例: (计划中) 拓展 TPU的边界(规划中) 重新审视深度神经网络中的 ... 
随机推荐
- 使用matplotlib进行可视化
			转自:https://blog.csdn.net/qq_30614345/article/details/99049790 https://blog.csdn.net/qq_30614345/arti ... 
- CSS sprites的定义及使用
			定义:CSS sprites 其实就是把网页中的一些背景图片整合到一张图片文件中,再利用CSS的“background-image”.“background-repeat”.“background-p ... 
- [CentOS 7]挂载ntfs格式U盘
			在我们将U盘插入装有CentOS的系统时,经常会出现如图所示的错误提示.这是因为linux系统并不能兼容NTFS的文件系统.其解决方法如下(建议先进入root模式): 1.首先下载"ntfs ... 
- READSJC.md
			这个作业属于哪个课程 软件工程 这个作业要求在哪里 点我 这个作业的目标 介绍自己 作业正文 往下看啦 其他参考文献 空空如也 介绍自己: 我是综合实验班的孙劼成. 天天宅在家里实在是太无聊了,就背背 ... 
- JavaWeb网上图书商城完整项目--21.用户模块各层相关类的创建
			1.现在要为user用户模块创建类 用户模块功能包括:注册.激活.登录.退出.修改密码. User类对照着t_user表来写即可.我们要保证User类的属性名称与t_user表的列名称完全相同. 我们 ... 
- android自定义控件onMeasure方法
			1.自定义控件首先定义一个类继承View 有时,Android系统控件无法满足我们的需求,因此有必要自定义View.具体方法参见官方开发文档:http://developer.android.com/ ... 
- 云服务器终端命令显示-bash-4.2#怎么解决
			原因:删除了root/.bashrc 和 root/.bash_profile两个文件的丢失 解决办法: -bash-4.2# cp /etc/skel/.bashrc /root/ -bash-4. ... 
- STM32内存受限情况下摄像头驱动方式与图像裁剪的选择
			1.STM32图像接收接口 使用stm32芯片,128kB RAM,512kB Rom,资源有限,接摄像头采集图像,这种情况下,内存利用制约程序设计. STM32使用DCMI接口读取摄像头,协议如下. ... 
- eclipse在debug模式下鼠标移动到变量上不显示值的问题
			在eclipse中调试时,鼠标移动到变量上不显示值,使用ctrl+shift+i,或者通过配置达到目的: Window->Preferences->Java->Editor-> ... 
- 一文说通MongoDB via Python操作
			Python并不仅仅是一个做Machine Learning的语言. 说到Python,一般都会感觉它关联着ML,如果不是做ML开发,就会觉得离自己很远.而实际上,作为一门语言,Python在应用 ... 
