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

目录

官方网址:

官方案例:

安装:

文本框内容打印小例子: 

基本组件

CheckBox案例

2个Action案例:

    获取文本框输入值:

多个Action获取输出:

 富文本框案例:


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

官方网址

GitHub - chriskiehl/Gooey: Turn (almost) any Python command line program into a full GUI application with one lineTurn (almost) any Python command line program into a full GUI application with one line - GitHub - chriskiehl/Gooey: Turn (almost) any Python command line program into a full GUI application with one linehttps://github.com/chriskiehl/Gooey

官方案例:

GitHub - chriskiehl/GooeyExamples: Example programs to Demonstrate Gooey's functionalityExample programs to Demonstrate Gooey's functionality - GitHub - chriskiehl/GooeyExamples: Example programs to Demonstrate Gooey's functionalityhttps://github.com/chriskiehl/GooeyExamples

安装:

 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

文本框内容打印小例子: 

使用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会打印输入文本框的内容。可以一直点运行,重复打印

注意: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                        富文本

CheckBox案例

注意配置checkbox的参数名:   '-f', '--foo',及checkbox类型,使用action='store_true'

  parser.add_argument(
        '-f', '--foo',
        metavar='Some Flag',
        action='store_true',
        help='I turn things on and off')

这样获取勾选 通过: args.foo

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2023/4/9 17:55
# @Author  : Lani
# @File    : guitest.py

from gooey import Gooey, GooeyParser

@Gooey(program_name="checkBoxTest")
def gui_main():
    parser = GooeyParser(description="checkBoxTest")
    parser.add_argument("-cb", "--test1", widget="CheckBox",  action="store_true",help="test1", gooey_options={
        "apple": bool,
    })
    #
    parser.add_argument(
        '-f', '--foo',
        metavar='Some Flag',
        action='store_true',
        help='I turn things on and off')
    
    args = parser.parse_args()
    print(args)
    if args.test1:
        print("test 勾选了")
    else:
        print("test1 未勾选")
    
    if args.foo:
        print("foo 勾选了")
    else:
        print("foo 未勾选")


if __name__ == "__main__":
    gui_main()

运行效果: 

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()

运行效果:

多个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()

运行效果:

 富文本框案例:

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()

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

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值