python 界面GUI - Gooey库快速搭建界面

tkinter库太难受了,有点变动界面要改半天,最近发一个快速出界面GUI库: Gooey. 相当符合,人生苦短,我用python.

安装:

 pip install Gooey -i https://pypi.douban.com/simple
会把相关的库全部安装:

Gooey-1.0.8.1 colored-1.4.3 psutil-5.9.0 pygtrie-2.4.2 wxpython-4.1.1

gooey库为我们提供了将每一个单一功能的命令行解析程序转化为GUI界面的一种解决方案。命令行解析式的界面操作,这个很有意思。

与pyqt相比,gooey作为傻瓜式的argparse来用,它搭建一些简单的gui应用,而且不易扩展,没有pyqt灵活。简单讲,gooey能实现的,pyqt很容易实现。而pyqt能实现的,gooey却不一定能实现得了。如果只是做个简单小工具推荐用gooey,如果是大型复杂界面推荐pyqt。 

windows上安装:

报错: error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools
Microsoft C++ Build Tools - Visual Studio

下载之后,选择安装 c++ 桌面开发,把勾选MSVC, 根据我系统选择win10

python 界面GUI - Gooey库快速搭建界面_第1张图片

文本框内容打印小例子: 

使用parser对象的add_argument()方法,可以为程序添加解析参数的GUI控件,转换成界面。

from gooey import Gooey , GooeyParser

@Gooey(program_name="BattCommunicate_GUI")
def gui_main():
    parser= GooeyParser(description ="BattCommunicate_GUI")
    parser.add_argument("Uart",widget="TextField")
    args = parser.parse_args()
    print(args)

if __name__ == '__main__':
    gui_main()

 运行:点击start会打印输入文本框的内容。可以一直点运行,重复打印

python 界面GUI - Gooey库快速搭建界面_第2张图片python 界面GUI - Gooey库快速搭建界面_第3张图片

注意:add_argument()里面的action名字不要带空格,否则会报错,参考:

python gui Gooey 报错 error: argument command: invalid choice:_LlanyW的博客-CSDN博客

基本组件

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

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

Textarea                        富文本

2个Action案例:

源码:关键在:parser.add_subparsers()语法可以创建多个子解析动作,

    获取文本框输入值:

        args.Reset_Cmms

Reset_Cmms为Action里对应文本框的名称- 关键字段,此处还是要注意add_argument()的参数名不要带空格。要不获取输入值这个方法无法使用。

from colored import stylize, attr
from gooey import Gooey, GooeyParser


@Gooey(program_name="BattCommunicate_GUI")
def gui_main():
    parser = GooeyParser(description="BattCommunicate_GUI")

    subs_list = parser.add_subparsers(help="cmms", dest="command")
    sub_action1 = subs_list.add_parser("Run_Reset")
    sub_action1.add_argument("Reset_Cmms",metavar="reset",default="s reset")
    sub_action2 = subs_list.add_parser("Get_battery")
    sub_action2.add_argument("Get_battery_Cmms",metavar="getbatt",default="b status")

    args = parser.parse_args()
    print(args, flush=True)  
    print(stylize("This is bold.",attr("bold")))
    print(type(args))
    if "s reset" in args.Reset_Cmms : # 获取文本框的输入值
        print(">>> reset success.")
    else:
        print(">>> ERROR: reset fail.")

if __name__ == '__main__':
    gui_main()

运行效果:

python 界面GUI - Gooey库快速搭建界面_第4张图片

多个Action获取输出:

网上的很多例子是用:

sublist_parser = parser.add_subparsers(dest="RESULT")

 根据上面这个定义,我这里需要用args.RESULT来判断是在执行哪个Action。

from gooey import Gooey
from gooey import GooeyParser


@Gooey(program_name="BattCommunicate_GUI", language="chinese")
def gui_main():
    parser = GooeyParser(description="BattCommunicate_GUI")
    sublist_parser = parser.add_subparsers(dest="RESULT")  # 创建一个可生成多 parser的 subparsers对象
    prs1 = sublist_parser.add_parser("test_result")  # 第一个子parser
    prs1.add_argument("end_result", widget="Dropdown", metavar="测试结果", choices=["PASS", "FAIL"])
    subparser2 = sublist_parser.add_parser("test_time")  # 第二个子parser
    subparser2.add_argument("times_d", metavar="测试时间",widget="Dropdown", choices=[">100s", ">200s"], default=">100s")
    args = parser.parse_args()
    print(args)
    if args.RESULT == "test_time": # 判断是执行哪个parser
        if args.times_d == ">100s": # 判断parser下参数输出
            print(">>> 测试时间 大于100s")
        else:
            print(">>> 测试时间 大于200s")

    if args.RESULT=="timest_result":
        if args.end_result=="PASS":
            print(">>> 测试成功~!")
        else:
            print(">>> ERROR: 测试失败~")


if __name__ == '__main__':
    gui_main()

运行效果:

python 界面GUI - Gooey库快速搭建界面_第5张图片 python 界面GUI - Gooey库快速搭建界面_第6张图片 

 富文本框案例:

from gooey import Gooey, GooeyParser
from colored import stylize, attr, fg


@Gooey(richtext_controls=True, auto_start=True)
def main():
    parser = GooeyParser(description='Just display the console')

    parser.parse_args()
    print(stylize("This is bold.", attr("bold")))
    print(stylize("This is underlined.", attr("underlined")))
    print(stylize("This is green.", fg("green")))
    print(stylize("This is red.", fg("red")))
    print(stylize("This is blue and bold.", fg("blue") + attr("bold")))


if __name__ == '__main__':
    main()

 运行结果:(疑问此处文字应该是有颜色???)

python 界面GUI - Gooey库快速搭建界面_第7张图片

你可能感兴趣的:(python,Gooey,ui)