一行代码将Python程序转换为图形界面应用

Karen110
• 阅读 1615

一行代码将Python程序转换为图形界面应用

Gooey项目支持用一行代码将(几乎)任何Python 2或3控制台程序转换为GUI应用程序。

1.快速开始

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南 进行安装。

如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

此外,推荐大家用VSCode编辑器,它有许多的优点:Python 编程的最好搭档—VSCode 详细指南

请选择以下任一种方式输入命令安装依赖: 1. Windows 环境 打开 Cmd (开始-运行-CMD)。
2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.

(方式一)安装Gooey的最简单方法是通过 PIP:

pip install Gooey

(方式二)或者,可以通过将项目克隆到本地目录来安装Gooey

git clone https://github.com/chriskiehl/Gooey.git

如果你的网络不支持从GitHub克隆,请在Python实用宝典上回复:Gooey 下载项目源代码。

解压后进入该文件夹,运行 setup.py:

python setup.py install

2.使用方法

Gooey 通过将一个简单的装饰器附加到主函数上,然后使用GooeyParser可将你所有需要用到的参数可视化为文本框、选择框甚至是文件选择框。

比如在scihub文献下载的文章中,我们需要输入两个参数:1.关键词,2.下载篇数,使用Gooey可以这么改:

from gooey import Gooey, GooeyParser  

@Gooey  
def main():  
    parser = GooeyParser(description="中文环境可用的scihub下载器 - @Python实用宝典")   
    parser.add_argument('path', help="下载路径", widget="DirChooser")  
    parser.add_argument('keywords', help="关键词")  
    parser.add_argument('limit', help="下载篇数")  
    args = parser.parse_args()  
    search(args.keywords, int(args.limit), args.path)

GooeyParser 和 ArgumentParser 一样,使用 add_argument 就可以增加输入参数,不同的是 GooeyParser 提供了可视化的选项:

parser.add_argument('path', help="下载路径", widget="DirChooser")

这一行代码,widget 参数给 args.path 变量提供了一个目录选择器(widget="DirChooser"),help参数用于提醒用户该选择器的作用,效果如下:

一行代码将Python程序转换为图形界面应用

当你不提供widget参数时,程序默认使用文本输入框。

parser.add_argument('keywords', help="关键词")  
parser.add_argument('limit', help="下载篇数")

一行代码将Python程序转换为图形界面应用

Gooey会自动编排你的参数,因此你不需要担心各个文本框或选择框的显示问题。代码中的:

args = parser.parse_args()  
search(args.keywords, int(args.limit), args.path)

args = parser.parse_args() 可以将用户输入的所有文本转化为对应对象的变量值,通过 args.var 可以直接提取对应的变量值。

这个简单的可视化程序完整代码及效果如下:

上滑查看更多代码

import asyncio  
from scihub import SciHub  
from gooey import Gooey, GooeyParser  

def search(keywords: str, limit: int, path: str):  
    """  
    搜索相关论文并下载  

    Args:  
        keywords (str): 关键词  
        limit (int): 篇数  
        path (str): 下载路径  
    """  
    sh = SciHub()  
    result = sh.search(keywords, limit=limit)  
    print(result)  

    loop = asyncio.get_event_loop()  
    # 获取所有需要下载的scihub直链  
    tasks = [sh.async_get_direct_url(paper["url"]) for paper in result.get("papers", [])]  
    all_direct_urls = loop.run_until_complete(asyncio.gather(*tasks))  
    print(all_direct_urls)  

    # 下载所有论文  
    loop.run_until_complete(sh.async_download(loop, all_direct_urls, path=path))  
    loop.close()  

@Gooey  
def main():  
    parser = GooeyParser(description="中文环境可用的scihub下载器 - @Python实用宝典")   
    parser.add_argument('path', help="下载路径", widget="DirChooser")  
    parser.add_argument('keywords', help="关键词")  
    parser.add_argument('limit', help="下载篇数")  
    args = parser.parse_args()  
    search(args.keywords, int(args.limit), args.path)  

main()

这份代码想要完美地运行起来请结合 你不得不知道的python超级文献批量搜索下载工具 的 scihub.py.

你也完全可以使用自己的程序进行图形界面化,这无关紧要。

效果如下:

一行代码将Python程序转换为图形界面应用

3.支持的widget组件

所有支持的widget组件如下:

1.勾选框 widget="CheckBox"

一行代码将Python程序转换为图形界面应用

2.下拉框 widget="DropDown"

一行代码将Python程序转换为图形界面应用

一行代码将Python程序转换为图形界面应用

3.互斥选择框 widget="RadioGroup"

一行代码将Python程序转换为图形界面应用

4.各种目标类型的选择框

文件选择框 widget="FileChooser"
目录选择框 widget="DirChooser"
多文件选择框 widget="MultiFileChooser"
文件保存目录 widget="FileSaver"

一行代码将Python程序转换为图形界面应用

5.日期/时间选择器 widget="DateChooser/TimeChooser"

一行代码将Python程序转换为图形界面应用

6.密码输入框 wiget="PasswordField"

一行代码将Python程序转换为图形界面应用

7.多选列表框 widget="Listbox"

一行代码将Python程序转换为图形界面应用

8.颜色选择器 widget="ColourChooser"

一行代码将Python程序转换为图形界面应用

9.可过滤的下拉框 widget="FilterableDropdown"

一行代码将Python程序转换为图形界面应用

10.滑片 widget="Slider"

一行代码将Python程序转换为图形界面应用

4.打包

在一切都测试完毕后使用正常后,你可以通过 pyinstaller 将这个可视化程序打包成exe可执行文件。

1.编写 PyInstaller buildspec

PyInstaller使用 buildspec 来确定如何捆绑项目。你可以在Python实用宝典后台回复 buildspec下载 build.spec.txt.

下载后你只需要改两行代码:

一行代码将Python程序转换为图形界面应用

如下所示:

一行代码将Python程序转换为图形界面应用

在路径前面带r,可以不用输入两个斜杆 '\' 哦。

2.执行打包命令

为了能够使用 PyInstaller, 我们需要使用pip安装这个模块:

pip install pyinstaller

然后进入 build.spec.text 所在文件夹,执行以下命令打包程序:

pyinstaller build.spec.txt

一行代码将Python程序转换为图形界面应用

打包完成后会在当前文件夹下生成一个dist文件夹,里面就包含了你打包生成的可执行文件,打包成功。

**-----**------**-----**---**** End **-----**--------**-----**-****

往期精彩文章推荐:

一行代码将Python程序转换为图形界面应用

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。

本文转自 https://mp.weixin.qq.com/s/d2eB9bhcYm6pA2e5Ws9GVA,如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Karen110 Karen110
3年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这