You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Chaquopy从Kotlin调用带EditText字符串参数的Python函数

在Chaquopy中调用接收EditText字符串参数的Python函数

核心实现逻辑

  • 获取Android里EditText控件的输入字符串
  • 通过Chaquopy的callAttr方法,把该字符串作为参数传递给Python函数
  • Python函数接收参数并完成处理后返回结果

修正后的Kotlin代码

// 初始化Python环境
val py: Python = Python.getInstance()
val pyObj: PyObject = py.getModule("script")

// 获取EditText的输入内容
val editText = findViewById<EditText>(R.id.your_edit_text_id)
val inputString = editText.text.toString()

// 在协程中调用Python函数(避免阻塞主线程)
CoroutineScope(Dispatchers.Main).launch {
    // 循环仅作示例,实际按需调整
    for (i in 1..1000000) {
        // 调用Python的main函数,传入EditText的字符串参数
        val result: PyObject = pyObj.callAttr("main", inputString)
        // 将结果展示到UI
        setLatex(sText, result.toString())
        delay(200)
    }
}

对应的Python代码

import sympy as sym
from sympy import *

def main(function_str):
    # 可选:将字符串转为sympy可解析的表达式(处理数学公式时需要)
    expr = sym.sympify(function_str)
    # 返回表达式的LaTeX格式字符串
    return sym.latex(expr)

关键注意点

  • callAttr方法的第二个及后续参数,就是传递给Python函数的实参,直接传入字符串即可,Chaquopy会自动处理Kotlin与Python的类型转换
  • 如果需要处理数学表达式,必须用sym.sympify()把字符串转成sympy表达式,否则直接返回的字符串LaTeX格式会不符合预期
  • 必须在协程或子线程中调用Python函数,避免阻塞Android主线程引发ANR

内容的提问来源于stack exchange,提问作者MilkyDwarf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:07:06