您尚未登录。

楼主 # 2025-02-07 21:13:43

coollofty
会员
注册时间: 2025-02-07
已发帖子: 6
积分: 106

代码放在函数里和不放在函数里,执行结果居然完全不同

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不会执行。这是为何?

离线

#1 2025-02-08 10:48:42

lyon1998
Moderator
注册时间: 2021-12-01
已发帖子: 123
积分: 155

Re: 代码放在函数里和不放在函数里,执行结果居然完全不同

请提供一下内核版本号,看起来是在REPL模式下的行为,在REPL模式下,遇到\n之后就会判断是否函数结束,也就是说,临时的解决办法是去掉 createUIToKeyboard 函数中的空行,或者用非REPL 模式运行。

需要看一下你调用python脚本的代码,如果是 obj_run() 或者直接复制进 REPL 终端执行,那么可能会导致进入 REPL 模式

离线

楼主 #2 2025-02-09 15:44:11

coollofty
会员
注册时间: 2025-02-07
已发帖子: 6
积分: 106

Re: 代码放在函数里和不放在函数里,执行结果居然完全不同

嗯,确定是空行问题,只要将空行加入和上一行结构相同的空格,问题就解决了。
另外,这个REPL模式我并没有在哪里看到有解释说明,能否提供一些资料我了解一下什么是REPL,谢谢

离线

#3 2025-02-13 08:07:25

lyon1998
Moderator
注册时间: 2021-12-01
已发帖子: 123
积分: 155

Re: 代码放在函数里和不放在函数里,执行结果居然完全不同

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

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn