太实用了!自己动手写软件——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会将控件自动放置在合适的位置
最后一行运行一个主函数
实现出来效果是这样的imageLabel控件
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的边界(规划中) 重新审视深度神经网络中的 ...
随机推荐
- opencv3.1.0 计算机中丢失 opencv_world310d.dll _vs2017解决方法
---------------------------opencv1.exe - 系统错误---------------------------无法启动此程序,因为计算机中丢失 opencv_worl ...
- WIN10下如何解决PL2303驱动不可用的问题或者com口显示黄色感叹号usb-to-serial
WIN10下如何解决PL2303驱动不可用的问题或者com口显示黄色感叹号usb-to-serial
- 万级TPS亿级流水-中台账户系统架构设计
万级TPS亿级流水-中台账户系统架构设计 标签:高并发 万级TPS 亿级流水 账户系统 背景 业务模型 应用层设计 数据层设计 日切对账 背景 我们需要给所有前台业务提供统一的账户系统,用来支撑所有前 ...
- v-on事件修饰符
.stop阻止冒泡 .prevent阻止默认行为 .capture实现捕获触发事件的机制(从大到小) .self实现只有点击当前元素时,才能出发事件处理函数 .once只触发一次事件函数 .stop和 ...
- ElasticSearch中倒排索引和正向索引
ElasticSearch搜索使用的是倒排索引,但是排序.聚合等不适合倒排索引使用的是正向索引 倒排索引 倒排索引表以字或词为关键字进行索引,表中关键字所对应的记录项记录了出现这个字或词的所有文档,每 ...
- linux网络编程-socket(37)
在编程的时候需要加上对应pthread开头的头文件,gcc编译的时候需要加了-lpthread选项 第三个参数是线程的入口参数,函数的参数是void*,返回值是void*,第四个参数传递给线程函数的参 ...
- AbstractQueuedSynchronizer和ReentranLock基本原理
先把我主要学习参考的文章放上来先,这篇文章讲的挺好的,分析比较到位,最好是先看完这篇文章,在接下去看我写的.不然你会一脸懵逼,不过等你看完这篇文章,可能我的文章对你也用途不大了 深入分析Abstrac ...
- 物联网SIM卡和SIM卡,真的不是一回事
[摘要]在物联网解决方案中,设备移动上网也需要使用SIM卡.那么,SIM卡是什么?各种SIM卡有什么区别?物联网SIM卡如何选择?本文将为您答疑解惑. 通信进化史 过去几百年间,通信技术经历了天变地异 ...
- Python实用笔记 (27)面向对象高级编程——使用枚举类
枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例.Python提供了Enum类来实现这个功能: from enum import Enum Month = Enum('Mon ...
- dart快速入门教程 (8)
9.dart中的库 9.1.自定义库 自定义库我们在前面已经使用过了,把某些功能抽取到一个文件,使用的时候通过import引入即可 9.2.系统内置库 以math库为例: import "d ...