我使用 Flet Python 开发了一个简单的应用程序。该应用程序包含一些控件,例如按行和列组织的文本和按钮。这是我的代码:
import flet as ft
def main(page: ft.Page):
def Next_Image(e):
print(page.controls)
# CONTROLS DESIGN
cont = ft.Container(bgcolor=ft.colors.AMBER,
border=ft.border.all(3, ft.colors.RED),
width=250,
height=600,
)
button_previous_img = ft.IconButton(icon=ft.icons.ARROW_CIRCLE_LEFT, tooltip='Previous Image')
button_next_img = ft.IconButton(icon=ft.icons.ARROW_CIRCLE_RIGHT, tooltip='Next Image', on_click=Next_Image)
text_num_img = ft.Text(value="DOC")
# ADD CONTROLS TO THE PAGE
page.add(
ft.Column(
[
cont,
ft.Row(
[
button_previous_img,
text_num_img,
button_next_img
],
alignment=ft.MainAxisAlignment.CENTER,
)
],
horizontal_alignment = ft.CrossAxisAlignment.CENTER,
)
)
page.update()
ft.app(target=main)
我想检索按按钮添加到页面的整个子控件树。我只能显示最外面的控件,特别是列。 此外,我想访问一个控件,假设按钮事件“Next_Image()”内的容器“cont”。有没有办法使用名称变量或其在控件集合中的索引来访问他?如:
cont = page.controls["cont"] # with the variable name
cont = page.controls["4"] # with the variable index (assuming it's 4)
如果你想要控件树,你可以使用这个:
def get_tree(controls, indent=""):
indent = indent + "\t"
for con in controls:
print(f"{indent}{con._get_control_name()}")
if hasattr(con, 'controls'):
if len(con.controls) > 0:
get_tree(con.controls, indent)
elif hasattr(con, 'content'):
if hasattr(con.content, 'controls'):
if len(con.content.controls) > 0:
get_tree(con.content.controls, indent)
else:
continue
get_tree(page.controls)
代码通过
controls
打印它们并打印它们的子项并更深入等等。
为了通过索引进行控制,您可以使用
cont = page.controls[0].controls[0]
如果你想得到cont
。
通过 page.controls[0]
,你进入 ft.Column
,然后你想要 ft.Column
的孩子,所以你使用 page.controls[0].controls[0]
,你就得到了你想要的