代码拉取完成,页面将自动刷新
本模块是一个函数装饰器,根据函数的参数和返回值,自动生成相应的gui组件
本模块灵感来源于magicgui,感谢作者
本模块设置两个分支,一个基于tkinter,一个基于streamlit
与magicgui的主要区别:
1、magicgui使用的工具是pyqt和pyside,本模块使用的是tkinter和streamlit 2、本模块只提供装饰器生成组件,不提供单独的gui组件 3、本模块可以返回输入组件的输入值,方便单独使用。
基本功能:使用装饰器,根据函数的参数和返回值,自动生成对应的gui组件。
tkinter分支
- 本分支主要基于tkinter,以及python标准库中的typing、ctypes。不需要安装pyside等第三方依赖。
- 本分支本着简易使用的原则,只有一个装饰器函数,没有其他参数设置。
- 本分支生成的输出组件,与返回值结果数量一致。
- 进行了DPI的自动适配,界面不会显示模糊
- 目前支持的参数类型:int、float、str、List[str]
streamlit分支
- 本分支主要基于streamlit
- 本分支可以设置输入组件水平放置,或者垂直放置。
- 水平放置时,可以设置每个组件列宽比例。
- 设置是否显示执行按钮,是否进行函数运算。
- 返回每个组件的输入值,和函数运行结果值,用于后续单独使用。
常规安装,包含tkinter和streamlit模块
pip install defgui
pip install streamlit
如果不需要使用streamlit,则安装 v 0.1版本
pip install defgui==0.1
直接在函数上加上装饰器就可以使用
from defgui import defgui_tkinter
from typing import List
# 定义函数
@defgui_tkinter
def example_function(a: int, b: float,c: str,d: List[str])-> tuple:
"""Example function that returns a tuple of four values."""
return a + 1, b + 1,"str:%s"%(c),d
# 运行函数
example_function()
运行结果
0.2.1版本更新说明:
from defgui import defgui_streamlit
import streamlit as st
import datetime
st.set_page_config(layout="wide")
st.title("Streamlit Decorator App")
@defgui_streamlit(horizontal=True, col_size=[1, 1, 1, 2, 2],execute=True)
def greet(date: datetime.date, name: str, age: int=20 , food: list=[]) -> str:
# 函数只作为输入组件使用时,直接return即可
return f"{date}, Hello, {name}! You are {age} years old, you like {food}"
greet_params, results = greet(name="david",food=["apple", "banana"])
st.write(greet_params["name"]) #使用参数名称获取输入值
下面是0.2版本的说明
(1)参数赋值运行、组件水平排列、显示执行按钮
from defgui import defgui_streamlit
import streamlit as st
import datetime
st.set_page_config(layout="wide")
st.title("Streamlit Decorator App")
@defgui_streamlit(horizontal=True, col_size=[1, 1, 1, 2, 2], execute=True)
def greet(date: datetime.date, name: str, age: int=20 , food: list=[]) -> str:
return f"{date}, Hello, {name}! You are {age} years old, you like {food}"
input_values, results = greet(name="david",food=["apple", "banana"])
st.write(input_values[1])
(2)参数不赋值,组件竖向排列,不显示执行按钮
from defgui import defgui_streamlit
import streamlit as st
import datetime
st.set_page_config(layout="wide")
st.title("Streamlit Decorator App")
@defgui_streamlit(horizontal=False, col_size=None, execute=False)
def greet(date: datetime.date, name: str, age: int , food: list) -> str:
return f"{date}, Hello, {name}! You are {age} years old, you like {food}"
cols = st.columns(3)
with cols[0]:
greet()
v 0.2.1 函数参数的输入值返回,由列表改为字典形式
v 0.2 增加基于streamlit的装饰器
v 0.1 基于tkinter的装饰器
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。