说明

Gooey 是一个 Python GUI 程序开发框架,基于 wxPython GUI 库,其使用方法类似于 Python 内置 CLI 开发库 argparse,用一行代码即可快速将控制台程序转换为GUI应用程序。

安装

本文测试使用python 3.6.6 版本(python2请自行测试)

  1. pip install Gooey
  2. # 或者,您可以通过将项目克隆到本地目录来安装Gooey
  3. git clone https://github.com/chriskiehl/Gooey.git
  4. python setup.py install

简单示例

  1. from gooey import Gooey, GooeyParser
  2. @Gooey
  3. def main():
  4. parser = GooeyParser(description="My Cool GUI Program!")
  5. parser.add_argument('Filename', widget="FileChooser") # 文件选择框
  6. parser.add_argument('Date', widget="DateChooser") # 日期选择框
  7. args = parser.parse_args() # 接收界面传递的参数
  8. print(args)
  9. if __name__ == '__main__':
  10. main()

基本组件

上面已经看到了两个简单的控件:FileChooserDateChooser·,分别提供了一个“文件选择器”和 “日期选择器”。现在支持的 chooser 类控件有:

控件名 控件类型
FileChooser 文件选择器
MultiFileChooser 文件多选器
DirChooser 目录选择器
MultiDirChooser 目录多选器
FileSaver 文件保存
DateChooser 日期选择
TextField 文本输入框
Dropdown 下拉列表
Counter 计数器
CheckBox 复选框
RadioGroup 单选框

全局配置

配置参数主要是对Gooey界面做全局配置,配置方法如下:

  1. @Gooey(program_name='Demo')
  2. def main():
  3. ...

和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
Gooey快速开发GUI应用程序 - 图1 Gooey快速开发GUI应用程序 - 图2 Gooey快速开发GUI应用程序 - 图3 Gooey快速开发GUI应用程序 - 图4

布局示例

以MQTT连接小工具为例,提供基本组件的使用方法

  1. from gooey import Gooey, GooeyParser
  2. from colored import stylize, attr, fg
  3. @Gooey(
  4. richtext_controls=True, # 打开终端对颜色支持
  5. program_name="MQTT连接订阅小工具", # 程序名称
  6. encoding="utf-8", # 设置编码格式,打包的时候遇到问题
  7. progress_regex=r"^progress: (\d+)%$" # 正则,用于模式化运行时进度信息
  8. )
  9. def main():
  10. settings_msg = 'MQTT device activation information subscription'
  11. parser = GooeyParser(description=settings_msg)
  12. subs = parser.add_subparsers(help='commands', dest='command')
  13. my_cool_parser = subs.add_parser('MQTT消息订阅')
  14. my_cool_parser.add_argument ("connect", metavar='运行环境',help="请选择开发环境",choices=['dev环境','staging环境'], default='dev环境')
  15. my_cool_parser.add_argument ("device_type",metavar='设备类型',help="请选择设备类型",choices=['H1','H3'],default='H1')
  16. my_cool_parser.add_argument ("serialNumber", metavar='设备SN号',default='LKVC19060047',help='多个请用逗号或空格隔开')
  17. siege_parser = subs.add_parser('进度条控制')
  18. siege_parser.add_argument('num',help='请输入数字',default=100)
  19. args = parser.parse_args()
  20. print(args,flush=True) # 坑点:flush=True在打包的时候会用到
  21. # 将界面收集的参数进行处理
  22. # ......
  23. if __name__ == '__main__':
  24. main()

将Gooey打包为独立应用程序

这里我们和普通python程序打包一样,使用流行的pyinstaller进行打包

1、安装pyinstaller

  1. pip install pyinstaller
  2. 1

2、创建build.spec

build.spec提供了有关如何构建程序包,要运行的安装挂钩以及要包含的资源的指令列表。

  1. import gooey
  2. gooey_root = os.path.dirname(gooey.__file__)
  3. gooey_languages = Tree(os.path.join(gooey_root, 'languages'), prefix = 'gooey/languages')
  4. gooey_images = Tree(os.path.join(gooey_root, 'images'), prefix = 'gooey/images')
  5. a = Analysis(['gooey_test_v2.py'], # 项目文件名称
  6. pathex=['D:\python3.6.6\Scripts'], # python安装路径
  7. hiddenimports=[],
  8. hookspath=None,
  9. runtime_hooks=None,
  10. )
  11. pyz = PYZ(a.pure)
  12. options = [('u', None, 'OPTION')]
  13. exe = EXE(pyz,
  14. a.scripts,
  15. a.binaries,
  16. a.zipfiles,
  17. a.datas,
  18. options,
  19. gooey_languages, # Add them in to collected files
  20. gooey_images, # Same here.
  21. name='CHANGE_MEe', # 打包文件名称
  22. debug=False,
  23. strip=None,
  24. upx=True,
  25. console=False,
  26. icon=os.path.join(gooey_root, 'images', 'program_icon.ico'))

使用此规范,您只需要进行两个更改:
1、更新Analysis构造函数中的应用程序路径以指向您的Python脚本
2、将EXE构造函数中的name参数更新为程序的名称。

3、开始打包

最后一步是将规范文件提供给PyInstaller并使其发挥作用。
在目录中打开带有您的spec文件的终端,然后输入:

  1. pyinstaller build.spec

打包完成之后,exe文件会生成在dist的目录中。打开它,即可使用