Gooey 是一个 Python GUI 程序开发框架,基于 wxPython GUI 库,其使用方法类似于 Python 内置 CLI 开发库 argparse,用一行代码即可快速将控制台程序转换为GUI应用程序。
本文测试使用python 3.6.6 版本(python2请自行测试)
pip install Gooey
# 或者,您可以通过将项目克隆到本地目录来安装Gooey
git clone https://github.com/chriskiehl/Gooey.git
python setup.py install
from gooey import Gooey, GooeyParser
@Gooey
def 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, GooeyParser
from 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()
这里我们和普通python程序打包一样,使用流行的pyinstaller进行打包
pip install pyinstaller
build.spec提供了有关如何构建程序包,要运行的安装挂钩以及要包含的资源的指令列表。
import gooey
gooey_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 files
gooey_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参数更新为程序的名称。
最后一步是将规范文件提供给PyInstaller并使其发挥作用。
在目录中打开带有您的spec文件的终端,然后输入:
pyinstaller build.spec
打包完成之后,exe文件会生成在dist的目录中。打开它,即可使用