克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

logo

本模块是一个函数装饰器,根据函数的参数和返回值,自动生成相应的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

直接在函数上加上装饰器就可以使用

注意:定义函数时,参数需要带类型标识,否则报错

1、tkinter分支使用

  • 本分支类型标识目前支持:int、float、str、List[str]
  • 点击自动生成的run按钮,显示输出结果
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()

运行结果

png

2、streamlit分支使用

  • 本分支类型标识目前支持:int、float、str、bool、list、datetime.date
  • list参数,没有赋值时,生成组件因为没有可选项,会显示灰色不可用。建议list参数赋值运行。
  • datetime.date参数,没有赋值时,生成的日期组件,默认使用当天日期
  • 定义函数时,参数可以是位置参数,也可以是关键字参数,但必须有类型标识,否则报错
  • 本分支装饰器,有3个默认参数:horizontal=True, col_size=None, execute=True
  • **horizontal=True:**输入组件默认以水平排列
  • **col_size=None:**列尺寸默认不设置,按输入组件数量,平均划分列宽
  • **execute=True:**默认显示执行按钮,并进行函数运算。False则不显示。
  • 被装饰函数执行时,默认返回输入组件值和结果值。输入组件值类型是列表,列表项顺序与函数的参数顺序一致。
  • 被装饰函数可以赋值执行,也可以不赋值运行

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

png

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

png

四、版本说明

v 0.2.1 函数参数的输入值返回,由列表改为字典形式

v 0.2 增加基于streamlit的装饰器

v 0.1 基于tkinter的装饰器

The MIT License (MIT) Copyright (c) 2019-2024 The Bootstrap Authors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

装饰器,使用Tkinter或Streamlit,自动生成函数输入输出组件。 展开 收起
Python
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化