image.png

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

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

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

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

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

软件界面

随后我又比较了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环境下观看,土豪随意~):

一张很有尺寸的演示图!

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

--- 9月27日更新----

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

python入门代码示例-这可能是最好玩的python GUI入门实例!相关推荐

  1. 好玩的python代码示例-这可能是最好玩的python GUI入门实例!

    image.png 简单的说,GUI编程就是给程序加上图形化界面. python的脚本开发简单,有时候只需几行代码就能实现丰富的功能,而且python本身是跨平台的,所以深受程序员的喜爱. 如果给程序 ...

  2. python复杂代码示例_6 个例子教你重构 Python 代码

    1. 合并嵌套的 if 条件 太多的嵌套会使代码难以理解,这在 Python 中尤为如此,因为 Python 没有括号来帮助区隔不同的嵌套级别. 阅读深度嵌套的代码容易让人烦躁,因为你必须理清哪些条件 ...

  3. python游戏代码示例_练习项目20:使用python制作游戏(中)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 上一篇教程,我们通过实现一个敌机由上至下的循环过程,初步了解了pygame这个模块的使用. 接下来,我们进行第二阶段,真正的实现一个通过鼠标控制的小游戏. ...

  4. python入门代码示例-总算知道python入门代码示例

    Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.作为今年来越来越流行的语言,我们该如何学习或者转行学习Python呢,这里小迹为大家介绍如何入门学习Python.以下是小编为你整理 ...

  5. python代码示例-总算知道python入门代码示例

    Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.作为今年来越来越流行的语言,我们该如何学习或者转行学习Python呢,这里小迹为大家介绍如何入门学习Python.以下是小编为你整理 ...

  6. python怎么反转单链表_单链表反转python实现代码示例

    单链表的反转可以使用循环,也可以使用递归的方式 1.循环反转单链表 循环的方法中,使用pre指向前一个结点,cur指向当前结点,每次把cur->next指向pre即可. 代码: class Li ...

  7. BIO,Socket网络编程入门代码示例,NIO网络编程入门代码示例,AIO 网络编程

    BIO,Socket网络编程入门代码示例 1.BIO服务器端程序 package cn.itcast.bio;import java.io.InputStream; import java.io.Ou ...

  8. python爬虫代码示例分享

    这篇文章主要介绍了三个python爬虫项目实例代码,使用了urllib2库,文中示例代码非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下. python爬虫代码示例分享 一. ...

  9. python初学者代码示例_python实现手势识别的示例(入门)

    使用open-cv实现简单的手势识别.刚刚接触python不久,看到了很多有意思的项目,尤其时关于计算机视觉的.网上搜到了一些关于手势处理的实验,我在这儿简单的实现一下(PS:和那些大佬比起来真的是差 ...

最新文章

  1. Activiti学习——Activiti与Spring集成
  2. 电脑一开机出rebootand_北京联想电脑维修站【蓝伟博达笔记本维修吧】
  3. ADO之connection
  4. (并查集)小希的迷宫
  5. udp 协议阻断_应对UDP反射放大攻击的五种常用防护思路
  6. lucene索引并搜索mysql数据库[转]
  7. python 简单的接口测试框架
  8. UE4官方文档阅读笔记——蓝图可视化编程
  9. 离散数学第六版第er章偶数题答案_离散数学 第2章 习题解答
  10. matlab 滑动平均窗滤波,滑动平均滤波器与CIC滤波器
  11. 鱼骨图分析法实际案例_慧程成功案例汽车行业质量管理系统,提质降本之道
  12. 调用腾讯云短信API接口
  13. selenium.webdriver网页无法正常打开的问题
  14. deepin/ubantu下 mysql 1698错误解决
  15. C++【C++11】
  16. java中国象棋兵吃棋规则_中国象棋吃子的规则
  17. 徐徐图之红楼之花自飘零水自流房东和房客彼得·潘与辛德瑞拉
  18. Cent OS几个好玩的命令
  19. [MySQL] PRIMARY KEY 主键
  20. 陌陌 Service Mesh 架构的探索与实践

热门文章

  1. logz.io一个企业级的ELK日志分析器 内部集成了机器学习识别威胁——核心:利用用户对于特定日志事件的反馈处理动作来学习判断日志威胁 + 类似语音识别的专家系统从各方收集日志威胁信息...
  2. pyhton3 json.dumps 去除空格
  3. web前端 —— 移动端知识的一些总结
  4. 1028 人口普查 (20 分)
  5. codeforces 383D
  6. dubbo协议原理机制 单一长连接
  7. spring boot系列03--spring security (基于数据库)登录和权限控制(下)
  8. strcat()函数常见问题
  9. Day2 : iOS第三方框架MBProgressHUD学习笔记
  10. jQuery 遍历后代