太实用了!自己动手写软件——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的边界(规划中) 重新审视深度神经网络中的 ...
随机推荐
- 一行代码让你的python运行速度提高100倍
转自:https://www.cnblogs.com/xihuineng/p/10630116.html 加上之后运行速度快了十倍,我的天呐. python一直被病垢运行速度太慢,但是实际上pytho ...
- rust 生命周期2
之前定义的结构体,都是不含引用的. 如果想定义含引用的结构体,请定义生命周期注解 #[warn(unused_variables)] struct ImportantExcerpt<'a> ...
- c++ UDP套接字客服端代码示范
c++ UDP套接字客服端代码示范 #include<winsock2.h> //包含头文件 #include<stdio.h> #include<windows.h&g ...
- 007.OpenShift管理应用部署
一 REPLICATION CONTROLLERS 1.1 RC概述 RC确保pod指定数量的副本一直运行.如果pod被杀死或被管理员显式删除,复制控制器将自动部署相应的pod.类似地,如果运行的po ...
- 我们是如何做go语言系统测试覆盖率收集的?
工程效能领域,测试覆盖率度量总是绕不开的话题,我们也不例外.在七牛云,我们主要使用go语言构建云服务,在考虑系统测试覆盖率时,最早也是通过围绕原生go test -c -cover的能力来构建.这个方 ...
- Android studio debug apk包安装失败
可在根目录gradle.properties中配置 android.injected.testOnly=false
- Spring AOP学习笔记04:AOP核心实现之创建代理
上文中,我们分析了对所有增强器的获取以及获取匹配的增强器,在本文中我们就来分析一下Spring AOP中另一部分核心逻辑--代理的创建.这部分逻辑的入口是在wrapIfNecessary()方法中紧接 ...
- 专家解读:利用Angular项目与数据库融合实例
摘要:面对如何在现有的低版本的框架服务上,运行新版本的前端服务问题,华为云前端推出了一种融合方案,该方案能让独立的Angular项目整体运行在低版本的框架服务上,通过各种适配手段,让Angular项目 ...
- JavaWeb网上图书商城完整项目--day02-7.提交注册表单功能之流程分析
1.点击注册之后将提交的信息传递到UserServlet的public String regist方法进行处理,然后将东西通过service进行处理 业务流程:
- Django REST Framework(一) Serializer和ModelSerializer
REST Framework概述 Django REST framework是一套基于Django的REST框架,是一个用于构建Web API的功能强大且灵活的工具包. 1.RESTful 简述Rep ...