Flet中Text组件无法完整显示变量内容的问题求助
问题分析与解决
核心问题
- 循环覆盖变量:查询数据的
for循环中,每次迭代都会重新赋值data变量,最终data只会保留最后一条查询结果。但print(data)在每次循环都执行,所以能输出所有结果,而Text组件只拿到最后一次的data。 - 字符串换行错误:代码中直接在字符串里换行,不符合Python字符串语法,应该用转义字符
\n实现换行。
修正后的代码
查询数据代码
email = mail.value if email: # 简化空值判断 search_filter = {"email": email} response = collection.find(search_filter) # 用列表收集所有结果 data_lines = [] for alimentos in response: food = alimentos['alimento'] vencimento = alimentos['vencimento'] # 用\n实现换行,将每条结果加入列表 line = f"Alimentos de : {email}: \n{food} Vencimento : {vencimento}" data_lines.append(line) # 将所有结果合并成一个字符串,用空行分隔每条数据 data = "\n\n".join(data_lines) print(data)
Text组件相关代码
def bs_close(e): bs2.open = False bs2.update() bs2 = BottomSheet( Container( Column( [ # 保留原Text配置,现在data包含所有查询结果 Text(data, size=10, weight="bold", expand=True), ElevatedButton("Ok", on_click=bs_close), ], alignment=MainAxisAlignment.CENTER, expand=True ), padding=10, ), open=True, ) page.overlay.append(bs2) page.update()
额外说明
- 用
f-string替代字符串拼接,代码更简洁易读。 - 空值判断简化为
if email:,效果和if not email == ""一致。 - 用
"\n\n".join(data_lines)合并结果,每条数据之间用空行分隔,显示更清晰。
内容的提问来源于stack exchange,提问作者Renzo-M
相关产品推荐
相关产品推荐

