Package: clarisse
[toc]Clarisse:cn::说明文档Clarisse is a light-weighted Python function GUI framework.With at least one single line of code, you can easily create a user-friendly GUI for your code(or a part of your code), yet not make other changes!TL;DRIf you have a function likedeffunc(arg1,arg2:int,arg3:str="have a try")->bool:...To give a GUI to a function like above, simply:fromclarisseimportClarisse@Clarisse()deffunc(arg1,arg2:int,arg3:str="have a try")->bool:...It's done.Any time whenfunc()is called, a GUI will be showed, allowing user to manually input/modify/check the arguments about to be given to the originalfunc()and get executed.@Clarisse()deffunc(arg1,arg2:int,arg3:str="have a try")->bool:"""This is only a ***test*** function\\but enough to show what clarisse do!"""print("arg1 is{0}".format(arg1))print(arg3.upper())returnarg2>10print(func("this is clarisse output",0))Clarisse understands your need!In the example above,func()still returns the originalbooltype value as if not modified(decorated); the arguments given when callingfunc()will be default values of them and be shown on the GUI.Clarisse provides you plenty of choices!You can runfunc()multiple times ( by clicking theRunbutton ) and check the output in the output dialog provided, and close the window to "confirm" the last result as your final run.Installation#pip install clarisseClarisse uses PySide2 as its backend GUI framework.Clarisse works well on Python 3.9.1 .CustomizationAfter using@Clarisse(), there are two ways to set the default value/ placeholder text for arguments : thedefheader of the function, the arguments' value when calling the function. The later way is prior than the former way.The window could also be modified by giving arguments to@Clarisse.marginis the distance from the widgets to the edge of window;vert_spacingis the distance between widgets;descriptionis the introduction of the function as a default(func.__doc__), but could also be customized to any other words you like;args_descis a list of string, each is used to replace the description label of an argument.args_kwdescis similar withargs_desc, but description label are given as adictlike{[argument name]:[argument description]}.Clarisse has a good compatibility with PyInstaller. You can set Clarisse as an interface of your command-line program, pack it through PyInstaller and distribute the binary file.TypingClarisse choose widgets for arguments based on their types.Note that if a type is not supported by Clarisse, it'll use anClrsUnknowntype to mark the argument. In that case the value would be shown/edited/passed instr.argument typesClarisse widgetsexampleintspin boxfloatspin box for floatstrline edit boxboolcheck boxlisttext edit boxdicttableAttentionif you usedtyping.List[a_type,...], Clarisse will call aa_type.__init__(arg_text:str)to give ana_typeobject to the function, make sure you have appropriate constructor;if you usedtyping.Dict[key_type,value_type,...], Clarisse will callkey_type.__init__(key_text:str)andvalue_type.__init__(value_text:str)to give an{key_type:value_type}dict to the function, make sure you have appropriate constructor.Examples@Clarisse(margin=10,vert_spacing=10,description="""another description.\\Note that this description is <font color=#ff0000>prior</font> than\\func.\_\_doc\_\_ .""")deffunc(arg1,arg2:int,arg3:str="have a try")->bool:"""This is only a ***test*** function\\but enough to show what clarisse do!"""print("arg1 is{0}".format(arg1))print(arg3.upper())returnarg2>10print(func("this is clarisse output",0))@Clarisse(args_desc=("This is arg1","This is arg2, label warps if it is too long"),args_kwdesc={"arg3":"an example to show args_kwdesc"})deffunc(arg1,arg2:int,arg3:str="have a try")->bool:"""This is only a ***test*** function\\but enough to show what clarisse do!"""print("arg1 is{0}".format(arg1))print(arg3.upper())returnarg2>10print(func())# actually doesn't need parameters when calling,# but need to be given before Run is clicked.Well done, but...Why not gooey?Gooeyis an outstanding and all-around framework for almost all kinds of python programs, but itneeds code modifications;you have to implement anArgumentParser: sad story forfireandclickusers :cry:works only for command line entrance;I failed to learn it - the doc of gooey is too too much for a non-native speaker like me :sob:Of course I advise you to choose gooey if you're familiar to it and need deep customization, but if you only need a light-weight, pain-less, quick-deployment GUI framework, maybe Clarisse is an alternative!...and, Future!Add more layouts, make them available to get changed;Apply QSS(CSS-like) style sheets for widgets to make them look better;Support classes;Add more supported types;......AcknowledgementsThanks to thefirelibrary that inspired me the idea;Thanks to thelatexify_pymodule that gives me the idea of interface and the lessons of  python syntax analyzing and the usage ofinspect;hey dude I also contributed to latexify_py that's a really handy module go star itThanks to@Hieronym, for the splendid fanfictionTo The Starsthe best fanfiction space opera I've ever read, which gives the name of this module.1MLightyears20201215