太实用了!自己动手写软件——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的边界(规划中) 重新审视深度神经网络中的 ...
随机推荐
- 在IntelliJ IDEA中注释使用的说明
/** * @author 标明该类模块的开发作者 * @version 标明该类模块的版本 * @see 参开转向,也就是相关的主题 * @param 对方法中的某些参数进行说明 * @return ...
- 02 . Ansible高级用法(运维开发篇)
自动化任务简介 假设我们要在10台linux服务器上安装一个nginx服务,手动是如何做的? # 第一步, ssh登录NUM(1,n)服务器 # 第二步,输入对应服务器密码 # 第三步,执行命令: y ...
- cb14a_c++_顺序容器的操作7_赋值与交换(swap)_vector转list
cb14a_c++_顺序容器的操作7_赋值与交换(swap) vector数据赋值给list, slist.assign(svec.begin(), svec.end());//这样可以转 svec- ...
- selenium(4)-针对键盘的操作
有哪些键盘操作 删除键 空格键 制表键 回退键 回车键 全选 复制 剪切 粘贴 F1-F12 ......其实就是所有键盘都能模拟,包括alt.shift.insert.delete.home等等等. ...
- Shiro密码重试次数限制
如在 1 个小时内密码最多重试 5 次,如果尝试次数超过 5 次就锁定 1 小时,1 小时后可再次重试,如果还是重试失败,可以锁定如 1 天,以此类推,防止密码被暴力破解.我们通过继承 HashedC ...
- 虹软人脸识别 - faceId及IR活体检测的介绍
虹软人脸识别 - faceId及IR活体检测的介绍 前几天虹软推出了 Android ArcFace 2.2版本的SDK,相比于2.1版本,2.2版本中的变化如下: VIDEO模式新增faceId(类 ...
- Java WebService学习笔记 - Axis(一)
WebService 简介 实际开发中,很多系统都是基于历史遗留系统进行开发,有时,这些系统基于不同的语言,如C,C++,C#,java,PHP等等.为了实现历史系统的再利用,或向外部程序暴露调用接口 ...
- 深度解剖dubbo源码---01dubbo的架构原理-探索.mp4
02内核解剖-dubbo自己的SPI实现.mp4 https://blog.csdn.net/prestigeding/article/details/80795708 https://segment ...
- 前端笔记(关于解决打包时报node-sass错误的问题)
这个问题之前反复出现,试过重新从其他同事将node_modules拿过来用,但是过了几天又出同样的问题 去网上百度了好久,大多数都说是node-sass重装一下就行.可是我这边卸载都无法卸载,何谈重装 ...
- jmeter在non-GUI模式下用法
用法 jmeter -n -t HTTPRequesttest.jmx -l testHistory/testResult.jtl -e -o testHistory/testReport 参数说明 ...