说明
Gooey 是一个 Python GUI 程序开发框架,基于 wxPython GUI 库,其使用方法类似于 Python 内置 CLI 开发库 argparse,用一行代码即可快速将控制台程序转换为GUI应用程序。
安装
本文测试使用python 3.6.6 版本(python2请自行测试)
pip install Gooey# 或者,您可以通过将项目克隆到本地目录来安装Gooeygit clone https://github.com/chriskiehl/Gooey.gitpython setup.py install
简单示例
from gooey import Gooey, GooeyParser@Gooeydef main():parser = GooeyParser(description="My Cool GUI Program!")parser.add_argument('Filename', widget="FileChooser") # 文件选择框parser.add_argument('Date', widget="DateChooser") # 日期选择框args = parser.parse_args() # 接收界面传递的参数print(args)if __name__ == '__main__':main()
基本组件
上面已经看到了两个简单的控件:FileChooser和 DateChooser·,分别提供了一个“文件选择器”和 “日期选择器”。现在支持的 chooser 类控件有:
| 控件名 | 控件类型 |
|---|---|
| FileChooser | 文件选择器 |
| MultiFileChooser | 文件多选器 |
| DirChooser | 目录选择器 |
| MultiDirChooser | 目录多选器 |
| FileSaver | 文件保存 |
| DateChooser | 日期选择 |
| TextField | 文本输入框 |
| Dropdown | 下拉列表 |
| Counter | 计数器 |
| CheckBox | 复选框 |
| RadioGroup | 单选框 |
全局配置
配置参数主要是对Gooey界面做全局配置,配置方法如下:
@Gooey(program_name='Demo')def main():...
和program_name参数配置一样,Gooey 还支持很多其它配置,下面是它支持的参数列表:
| 参数 | 类型 | 简介 |
|---|---|---|
| advanced | Boolean | 切换显示全部设置还是仅仅是简化版本 |
| show_config | Boolean | Skips the configuration all together and runs the program immediately |
| language | str | 指定从 gooey/languages 目录读取哪个语言包 |
| program_name | str | GUI 窗口显示的程序名。默认会显 sys.argv[0]。 |
| program_description | str | Settings 窗口顶栏显示的描述性文字。默认值从 ArgumentParser 中获取。 |
| default_size | (600,400) | 窗口默认大小。 |
| required_cols | 1 | 设置必选参数行数。 |
| optional_cols | 2 | 设置可选参数行数。 |
| dump_build_config | Boolean | 将设置以 JSON 格式保存在硬盘中以供编辑/重用。 |
| richtext_controls | Boolean | 打开/关闭控制台对终端控制序列的支持(对字体粗细和颜色的有限支持) |
布局定制
通过使用一些简单的自定义,您可以使用Gooey实现相当灵活的布局。
在最高级别,您可以通过Gooey装饰器的各种参数来控制几个总体布局选项
show_sidebar=True |
show_sidebar=False |
navigation='TABBED' |
tabbed_groups=True |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
布局示例
以MQTT连接小工具为例,提供基本组件的使用方法
from gooey import Gooey, GooeyParserfrom colored import stylize, attr, fg@Gooey(richtext_controls=True, # 打开终端对颜色支持program_name="MQTT连接订阅小工具", # 程序名称encoding="utf-8", # 设置编码格式,打包的时候遇到问题progress_regex=r"^progress: (\d+)%$" # 正则,用于模式化运行时进度信息)def main():settings_msg = 'MQTT device activation information subscription'parser = GooeyParser(description=settings_msg)subs = parser.add_subparsers(help='commands', dest='command')my_cool_parser = subs.add_parser('MQTT消息订阅')my_cool_parser.add_argument ("connect", metavar='运行环境',help="请选择开发环境",choices=['dev环境','staging环境'], default='dev环境')my_cool_parser.add_argument ("device_type",metavar='设备类型',help="请选择设备类型",choices=['H1','H3'],default='H1')my_cool_parser.add_argument ("serialNumber", metavar='设备SN号',default='LKVC19060047',help='多个请用逗号或空格隔开')siege_parser = subs.add_parser('进度条控制')siege_parser.add_argument('num',help='请输入数字',default=100)args = parser.parse_args()print(args,flush=True) # 坑点:flush=True在打包的时候会用到# 将界面收集的参数进行处理# ......if __name__ == '__main__':main()
将Gooey打包为独立应用程序
这里我们和普通python程序打包一样,使用流行的pyinstaller进行打包
1、安装pyinstaller
pip install pyinstaller• 1
2、创建build.spec
build.spec提供了有关如何构建程序包,要运行的安装挂钩以及要包含的资源的指令列表。
import gooeygooey_root = os.path.dirname(gooey.__file__)gooey_languages = Tree(os.path.join(gooey_root, 'languages'), prefix = 'gooey/languages')gooey_images = Tree(os.path.join(gooey_root, 'images'), prefix = 'gooey/images')a = Analysis(['gooey_test_v2.py'], # 项目文件名称pathex=['D:\python3.6.6\Scripts'], # python安装路径hiddenimports=[],hookspath=None,runtime_hooks=None,)pyz = PYZ(a.pure)options = [('u', None, 'OPTION')]exe = EXE(pyz,a.scripts,a.binaries,a.zipfiles,a.datas,options,gooey_languages, # Add them in to collected filesgooey_images, # Same here.name='CHANGE_MEe', # 打包文件名称debug=False,strip=None,upx=True,console=False,icon=os.path.join(gooey_root, 'images', 'program_icon.ico'))
使用此规范,您只需要进行两个更改:
1、更新Analysis构造函数中的应用程序路径以指向您的Python脚本
2、将EXE构造函数中的name参数更新为程序的名称。
3、开始打包
最后一步是将规范文件提供给PyInstaller并使其发挥作用。
在目录中打开带有您的spec文件的终端,然后输入:
pyinstaller build.spec
打包完成之后,exe文件会生成在dist的目录中。打开它,即可使用




