如何用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
相关产品推荐
相关产品推荐

