import pika_lvgl as lv
scr = lv.scr_act()
inputH = SystemInfo.fontHeight * 3.5
def createUIToWifiServer(evt):
wm = WifiManager()
r = wm.scan()
if (r < 0):
print('WifiScan error:', r)
else:
for i in range(r):
wm.get(i)
def createUIToKeyboard(evt):
kbInput = lv.textarea(scr)
kbInput.set_pos(0, 0)
kbInput.set_size(scr.get_width(), inputH)
kb = lv.keyboard(scr)
kb.set_textarea(kbInput)
print('-------1')
span = lv.label(scr)
print('-------1')
span.set_pos(0, inputH + 8)
span.set_size(scr.get_width(), inputH)
span.set_flex_align(lv.FLEX_FLOW.ROW_WRAP, lv.FLEX_ALIGN.CENTER, lv.FLEX_ALIGN.CENTER)
print('-------1')
span.set_text('')
print('-------2')
tip = lv.label(span)
tip.set_text('如键盘无法设置密码,可尝试更换方式连接')
chgMode = lv.btn(span)
chgMode.set_pos(SystemInfo.fontHeight * 20, inputH + 8)
chgMode.add_event_cb(createUIToWifiServer, lv.EVENT.CLICKED, 0)
lv.label(chgMode).set_text('使用手机设置 >')
createUIToKeyboard(None)
上面这段代码,如果我将createUIToKeyboard函数去掉,将代码向左缩进一格直接执行,就没有任何问题。而这样放在函数里,则只能执行到kb.set_textarea(kbInput)这一行之前,这个函数就不再返回了,后面的print不会执行。这是为何?
离线
请提供一下内核版本号,看起来是在REPL模式下的行为,在REPL模式下,遇到\n之后就会判断是否函数结束,也就是说,临时的解决办法是去掉 createUIToKeyboard 函数中的空行,或者用非REPL 模式运行。
需要看一下你调用python脚本的代码,如果是 obj_run() 或者直接复制进 REPL 终端执行,那么可能会导致进入 REPL 模式
离线
嗯,确定是空行问题,只要将空行加入和上一行结构相同的空格,问题就解决了。
另外,这个REPL模式我并没有在哪里看到有解释说明,能否提供一些资料我了解一下什么是REPL,谢谢
离线
REPL 简单来说就是用户交互运行,当检测到用户输入了 \n 就会去执行,如果是正常执行文件就不会有这个问题。
参考文档:https://pikapython.com/doc/%E6%94%AF%E6%8C%81%E4%BA%A4%E4%BA%92%E5%BC%8F%E8%BF%90%E8%A1%8C.html
离线