这可能是最好玩的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自动化测试之setUp与tearDown实例
Sep 28 Python
python实现ping的方法
Jul 06 Python
Django的session中对于用户验证的支持
Jul 23 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 Python
python常见排序算法基础教程
Apr 13 Python
Python使用defaultdict读取文件各列的方法
May 11 Python
python正则表达式的使用
Jun 12 Python
Python自动化运维_文件内容差异对比分析
Dec 13 Python
python 通过logging写入日志到文件和控制台的实例
Apr 28 Python
详解Python 数据库的Connection、Cursor两大对象
Jun 25 Python
pandas 对group进行聚合的例子
Dec 27 Python
利用Python第三方库实现预测NBA比赛结果
Jun 21 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类声明和php类使用方法示例分享
2014/03/29 PHP
PHP文件操作方法汇总
2015/07/01 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
accesskey 提交
2006/06/26 Javascript
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
JS 自动安装exe程序
2008/11/30 Javascript
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
AngularJS中transclude用法详解
2016/11/03 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
详解react native页面间传递数据的几种方式
2018/11/07 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
js计时事件实现圆形时钟
2020/03/25 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[40:19]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.18
2020/12/19 DOTA
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
Django框架教程之正则表达式URL误区详解
2018/01/28 Python
python正则表达式匹配不包含某几个字符的字符串方法
2019/07/23 Python
Python callable内置函数原理解析
2020/03/05 Python
Why do we need Unit test
2013/01/03 面试题
光电信息专业应届生求职信
2013/10/07 职场文书
单位门卫岗位职责
2013/12/20 职场文书
自行车租赁公司创业计划书
2014/01/28 职场文书
保安岗位职责
2014/02/21 职场文书
小学生期末评语大全
2014/04/21 职场文书
优秀团员事迹材料2000字
2014/08/20 职场文书
购房协议书范本
2014/10/02 职场文书
广告业务员岗位职责
2015/02/13 职场文书
SQL注入详解及防范方法
2021/12/06 MySQL
「女孩的钓鱼慢活」全新版权绘公布
2022/03/21 日漫