我第一次尝试编写一个GUI程序,它 Package 了一个非常基本的脚本(这样不太熟悉CLI的人就可以运行它)。
我希望的一件事是,对于那些如此倾向于使用相同选项的人来说,该脚本仍然是CLI可用的。
我使用Gooey
,因为它似乎很好,简单的人开始,但现在我卡住了关于如何去'切换'它。
为了使用GUI,必须使用python框架二进制文件来执行脚本,所以我的第一个想法是寻找一个使用非框架二进制文件显式调用脚本的人,并在其余时间将shebang点设置为#!/usr/bin/env pythonw
。我认为这在原则上是可行的,但目前我只能想到使用一个简单的if-else进行测试。
这很好,但是,@Gooey
装饰器需要使用GooeyParser
而不是ArgumentParser
(来自argparse
)。所以目前,这意味着我需要在代码中两次摄取函数的整个参数,这感觉绝对不是Python的。
例如:
from gooey import Gooey, GooeyParser
@Gooey(program_name="Hi I'm progam X")
def gui_args():
"""Parse GUI arguments"""
parser = GooeyParser()
parser.add_argument(
"-f",
"--file",
action="store",
widget="FileChooser",
help="Some input file."
)
from argparse import ArgumentParser
def get_args():
"""Parse command line arguments"""
parser = ArgumentParser()
parser.add_argument(
"-f",
"--file",
action="store",
help="Some input file."
)
def main():
if <some_framework_python_test>:
args = gui_args()
else:
args = get_args()
字符串
是否有一种聪明的方法可以根据代码的启动方式在GUI和CLI行为之间切换,而无需复制代码?
我的其他想法包括基于其他线程切换装饰器,但这相当复杂,而且我还需要在实际代码中将GooeyParser
切换到ArgumentParser
。或者也许Gooey
已经提供了这个功能,而我遗漏了一些明显的东西(例如,我知道Gooey
处理argparse风格的帮助格式。
我也不太了解框架python,所以我不知道我的建议是否可行。欢迎所有建议!目前,在不指定pythonw
二进制文件的情况下运行代码只会抛出一个错误,即Gooey
找不到屏幕。
1条答案
按热度按时间soat7uwm1#
所以正如我所料,肯定有一个“聪明”/优雅的方式。
有一个(目前)未记录的选项
--ignore-gooey
,它将使脚本表现得像普通的python脚本。一个issue has been created on the github repo,作者将在不太遥远的将来记录这一点。
Gooey
实际上在终端中将此参数作为所运行命令的完整表示形式,其中所有参数都在GUI中提供,这就是我在调度要运行的实际代码时注意到的。为了得到一个全面的答案,如果您通常像这样调用GUI程序 *:
字符串
要启动一个完整的GUI会话,您可以像这样调用它:
型
-u
。