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
使用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 富文本
源码:关键在: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()
运行效果:
网上的很多例子是用:
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()
运行结果:(疑问此处文字应该是有颜色???)