简单的说,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

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

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

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

python界面长什么样子-这可能是最好玩的python GUI入门实例(推荐)相关推荐

  1. python界面长什么样子-图形界面

    Python支持多种图形界面的第三方库,包括: Tk wxWidgets Qt GTK 等等. 但是Python自带的库是支持Tk的Tkinter,使用Tkinter,无需安装任何包,就可以直接使用. ...

  2. Python界面编程第十九课:Pyside2 (Qt For Python)创建菜单

    先看完整代码: from PySide2.QtWidgets import QApplication,QMainWindow, QAction import sys from PySide2.QtGu ...

  3. Python界面编程第十五课:Pyside2 (Qt For Python)使用CheckBox复选框

    QCheckBox 是什么? QCheckBox 是一个开关选择按钮,有checked和unchecked两个状态. 复选框通常用于表示应用程序中可以启用或禁用而不影响其他功能的功能.可以实现不同类型 ...

  4. Python界面编程第十八课:Pyside2 (Qt For Python)Slider拖动条

    先上代码: from PySide2.QtWidgets import QApplication, QWidget,QHBoxLayout, QLabel, QSlider import sys fr ...

  5. Python界面编程第十四课:Pyside2 (Qt For Python)使用Calendar创建日历

    QCalendar 是什么? QCalendar对象使用特定系统规则将年.月和日映射到特定的日期(最终由它的Julian天数标识). 默认的QCalendar() 是一个扩展的Gregorian日历, ...

  6. Python界面编程第十二课:Pyside2 (Qt For Python)布局管理QVBoxLayout 和 QHBoxLayout

    QHBoxLayout用于构造水平框布局对象,QVBoxLayout用于构造垂直框布局对象. 先看完整代码: from PySide2.QtWidgets import QApplication, Q ...

  7. python界面长什么样图片_python界面是什么样的

    安装完Python,在命令行输入"python"之后,如果成功,会得到类似于下面的窗口: 可以看到,结尾有3个>符号(>>>).>>>被叫 ...

  8. python软件长什么样子图片高清_手把手:扫描图片又大又不清晰?这个Python小程序帮你搞定!...

    大数据文摘作品 编译:HAPPEN.于乐源.小鱼 一位乐于分享学生精彩笔记的大学教授对于扫描版的文件非常不满意--颜色不清晰并且文件巨大.他因此用python自己写了一个小程序来解决这个问题. 这个程 ...

  9. python界面是什么样子的图片_如何在python界面显示图片

    展开全部 5261代码: 4102# show a jpeg (.jpg) image using wxPython, newer coding style 1653# two different w ...

最新文章

  1. CentOS4 可用镜像及更新方式
  2. hdu 4419 Colourful Rectangle (离散化扫描线线段树)
  3. [Swift]LeetCode551. 学生出勤纪录 I | Student Attendance Record I
  4. java反射头文件_编程基础知识——C++能不能支持Java和ObjC的反射?
  5. 你真的适合做前端吗?自学入行的那些坑
  6. STM32之SPI原理
  7. java 13个核心技术3
  8. python入门指南txt-pip安装和使用入门指南
  9. PCL:RANSAC 空间直线拟合
  10. 【深度干货】强化学习应用简述
  11. MDM平台数据分发功能说明
  12. 2020-10-27
  13. Bootstrap系列之折叠(Collapse)
  14. 英雄不问出处--十大名企用人理念
  15. Vue+Vuex+Axios+ECharts 画一个动态更新的中国地图
  16. vue3.0为什么要用Proxy替代defineProperty
  17. vue引入D3绘制流程图
  18. 湍流系数计算器_粘性流体在圆管内湍流时传热系数计算公式与在线计算器_三贝计算网_23bei.com...
  19. picoCTF,Web Exploitation,网页开发类,39/45
  20. 防止开发人员开发后门程序,数据库安全之应用程序调用的危险

热门文章

  1. pyhton3 模拟打开网页
  2. 长尾关键词挖掘工具和使用方法
  3. BZOJ3277 串 【广义后缀自动机】
  4. 51nod 1013【快速幂+逆元】
  5. AndroidAnnotations框架简单使用方法
  6. Palindrome Linked List
  7. web service(web服务)总结
  8. 获取本地System权限
  9. ASp.net 剖析三层架构
  10. 左右HttpClient上传的方法来解决中国的乱码