python 使用“Gooey”在GUI和CLI模式之间切换的“聪明”方式

14ifxucb  于 2023-08-02  发布在  Python
关注(0)|答案(1)|浏览(123)

我第一次尝试编写一个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找不到屏幕。

soat7uwm

soat7uwm1#

所以正如我所料,肯定有一个“聪明”/优雅的方式。
有一个(目前)未记录的选项--ignore-gooey,它将使脚本表现得像普通的python脚本。
一个issue has been created on the github repo,作者将在不太遥远的将来记录这一点。
Gooey实际上在终端中将此参数作为所运行命令的完整表示形式,其中所有参数都在GUI中提供,这就是我在调度要运行的实际代码时注意到的。
为了得到一个全面的答案,如果您通常像这样调用GUI程序 *:

$ pythonw MyGooeyScript.py

字符串
要启动一个完整的GUI会话,您可以像这样调用它:

$ pythonw --ignore-gooey  MyGooeyScript.py <options>

  • 有时需要以无缓冲模式启动python,使用-u

相关问题