这可能是最好玩的python GUI入门实例(推荐)


Posted in Python onJuly 19, 2019

这可能是最好玩的python GUI入门实例(推荐)

简单的说,GUI编程就是给程序加上图形化界面.

python的脚本开发简单,有时候只需几行代码就能实现丰富的功能,而且python本身是跨平台的,所以深受程序员的喜爱.

如果给程序加一个图形化界面,那么普通的用户也就能用上python的脚本,极大提升工作效率,所以给python程序加上图形化界面,把自己写的脚本,提供给普通用户,的确是一件激动人心的事!

如何给python脚本加图形化界面?

作者首先考虑了通过浏览器运行python的图形化界面,为了理想的效果,python需要借助javascript实现一些功能,而且python需要额外安装pyv8模块,我折腾了一下,发现pyv8模块安装很麻烦,而且依赖的库很多,编译安装也根据不同的操作系统,存在各种坑,pyv8不适合普通用户,于是就暂时搁置了pyv8模块.

这可能是最好玩的python GUI入门实例(推荐)

软件界面

随后我又比较了pyqt5与tkinter两个模块: pyqt5功能很强,界面也漂亮,但语法比较复杂,pyqt5模块需要单独安装,不适合新手入门;

tkinter是python3自带的模块,能满足基本的功能需求,语法也简单,基本上5分钟就能上手,所以最终选择了tkinter.

网上当前的python GUI教程存在的问题:

1.功能太简单,基本功能就是"花式"显示"Hello World";

2.注释不明了,复制粘贴别人写的博客代码,代码残缺

3.版本老旧,都是针对python2.7的程序,导入方式如 import Tkinter ,python3应为 import tkinter

这次作者选择了一个 "根据ip地址定位地理位置"的脚本,作为本次教程的素材,比较好玩,也比较容易实现:

解释的内容都放到了注释里,上代码:

import tkinter
import pygeoip

class FindLocation(object):
 def __init__(self):
 self.gi = pygeoip.GeoIP("./GeoLiteCity.dat")
 # 创建主窗口,用于容纳其它组件
 self.root = tkinter.Tk()
 # 给主窗口设置标题内容
 self.root.title("全球定位ip位置(离线版)")
 # 创建一个输入框,并设置尺寸
 self.ip_input = tkinter.Entry(self.root,width=30)

 # 创建一个回显列表
 self.display_info = tkinter.Listbox(self.root, width=50)

 # 创建一个查询结果的按钮
 self.result_button = tkinter.Button(self.root, command = self.find_position, text = "查询")

 # 完成布局
 def gui_arrang(self):
 self.ip_input.pack()
 self.display_info.pack()
 self.result_button.pack()

 # 根据ip查找地理位置
 def find_position(self):
 # 获取输入信息
 self.ip_addr = self.ip_input.get()
 aim = self.gi.record_by_name(self.ip_addr)
 # 为了避免非法值,导致程序崩溃,有兴趣可以用正则写一下具体的规则,我为了便于新手理解,减少代码量,就直接粗放的过滤了
 try:

  # 获取目标城市
  city = aim["city"]
  # 获取目标国家
  country = aim["country_name"]
  # 获取目标地区
  region_code = aim["region_code"]
  # 获取目标经度
  longitude = aim["longitude"]
  # 获取目标纬度
  latitude = aim["latitude"]
 except:
  pass
 
 # 创建临时列表
 the_ip_info = ["所在纬度:"+str(latitude),"所在经度:"+str(longitude),"地域代号:"+str(region_code),"所在城市:"+str(city), "所在国家或地区:"+str(country), "需要查询的ip:"+str(self.ip_addr)]
 #清空回显列表可见部分,类似clear命令
 for item in range(10):
  self.display_info.insert(0,"")

 # 为回显列表赋值
 for item in the_ip_info:
  self.display_info.insert(0,item)
 # 这里的返回值,没啥用,就是为了好看
 return the_ip_info


def main():
 # 初始化对象
 FL = FindLocation()
 # 进行布局
 FL.gui_arrang()
 # 主程序执行
 tkinter.mainloop()
 pass


if __name__ == "__main__":
 main()

运行效果(为了更好的演示效果,使用了gif图,图片尺寸较大,建议在wifi环境下观看,土豪随意~):

这可能是最好玩的python GUI入门实例(推荐)

一张很有尺寸的演示图!

由于离线查询ip需要全球IP的分布数据,所以我直接选择了一个免费离线查询ip的数据包,为了读取这个包的数据还需要安装一个模块: pip install pygeoip ,极少数人的当年安装python3的时候,选了不含tkinter的python3安装包,为了学习,还是要把这个模块补上: pip install tkinter

如果想将示例程序转为windows下的可执行文件(.exe),参考这篇

教程涉及到的资源我都通过百度网盘分享给大家,为了便于大家的下载,资源整合到了一张独立的帖子里,链接如下:

http://www.jianshu.com/p/4f28e1ae08b1

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简介二分查找算法与相关的Python实现示例
Aug 26 Python
Python开发的HTTP库requests详解
Aug 29 Python
Python实现对百度云的文件上传(实例讲解)
Oct 21 Python
Python返回数组/List长度的实例
Jun 23 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
Jul 30 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
python获取磁盘号下盘符步骤详解
Jun 19 Python
使用sklearn对多分类的每个类别进行指标评价操作
Jun 11 Python
Python 处理日期时间的Arrow库使用
Aug 18 Python
python 统计代码耗时的几种方法分享
Apr 02 Python
Python 内置函数速查表一览
Jun 02 Python
python模板入门教程之flask Jinja
Apr 11 Python
python如何实现数据的线性拟合
Jul 19 #Python
django获取from表单multiple-select的value和id的方法
Jul 19 #Python
django 信号调度机制详解
Jul 19 #Python
python傅里叶变换FFT绘制频谱图
Jul 19 #Python
Django forms表单 select下拉框的传值实例
Jul 19 #Python
Django组件content-type使用方法详解
Jul 19 #Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 #Python
You might like
PHP如何透过ODBC来存取数据库
2006/10/09 PHP
php date与gmdate的获取日期的区别
2010/02/08 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
2016/12/12 PHP
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
2015/03/03 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
移动端(微信等使用vConsole调试console的方法
2019/03/05 Javascript
浅探express路由和中间件的实现
2019/09/30 Javascript
js实现验证码干扰(动态)
2021/02/23 Javascript
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
python绘制条形图方法代码详解
2017/12/19 Python
python实现验证码识别功能
2018/06/07 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
python 实现字符串下标的输出功能
2020/02/13 Python
浅谈Python 函数式编程
2020/06/20 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
Vans(范斯)德国官网:美国南加州的原创极限运动潮牌
2017/05/02 全球购物
GANT葡萄牙官方商店:拥有美国运动服传统的生活方式品牌
2018/10/18 全球购物
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
德国的各种媒体在线商店:Thalia.de(书籍、电子书、玩具等)
2020/10/08 全球购物
用友笔试题目
2016/10/25 面试题
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
团代会主持词
2014/04/02 职场文书
促销活动计划书
2014/05/02 职场文书
文明礼貌演讲稿
2014/05/12 职场文书
机关搬迁方案
2014/05/18 职场文书
关于教师节的演讲稿
2014/09/04 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
保研推荐信范文
2015/03/25 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书