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

作者:木子昭 时间:2021-02-01 15:33:42 

这可能是最好玩的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),参考这篇

https://www.jb51.net/article/165766.htm

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

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

来源:https://www.jianshu.com/p/8abcf73adba3

标签:python,GUI,入门
0
投稿

猜你喜欢

  • ORACLE8的分区管理

    2023-07-13 14:42:43
  • Python Django view 两种return的实现方式

    2022-05-03 16:07:04
  • Python实现压缩文件夹与解压缩zip文件的方法

    2023-07-31 20:43:09
  • 如何在MySQL数据库中使用XML数据

    2009-12-29 10:48:00
  • JS重现80后儿时经典拼板(模板)游戏

    2011-09-11 18:36:46
  • Python反爬虫技术之防止IP地址被封杀的讲解

    2022-05-09 10:44:12
  • Oracle数据库安全策略分析 (三)

    2010-07-31 13:24:00
  • Python pandas.DataFrame调整列顺序及修改index名的方法

    2023-11-22 20:53:59
  • python 调用有道api接口的方法

    2021-11-18 18:51:16
  • 从源码解析Python的Flask框架中request对象的用法

    2021-02-20 02:15:57
  • 解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了

    2023-06-13 19:13:36
  • Python Pandas 获取列匹配特定值的行的索引问题

    2023-11-01 06:37:42
  • javascript 函数调用的对象和方法

    2010-07-02 12:25:00
  • Python字体反爬实战案例分享

    2021-06-18 01:00:46
  • 14道基础Python练习题(附答案)

    2023-07-23 02:27:41
  • python用plotly实现绘制局部放大图

    2021-06-13 06:30:44
  • 仿china.nba.com焦点图轮播展示效果(ie6,ff)

    2008-04-21 12:54:00
  • 实现SQL Server到DB2连接服务器很简单

    2010-08-08 15:24:00
  • 教你使用Python提取视频中的美女图片

    2021-05-21 22:41:50
  • python 遍历可迭代对象的实现方法

    2021-03-02 07:13:07
  • asp之家 网络编程 m.aspxhome.com