Skip to content

Commit e564ee2

Browse files
authored
Todo tutorial updates (#138)
* updated step-2 and flet version * Update to-do-3.py import flet as ft * removed UserControl from step 3 * remove UserControl from TodoApp class * clean up * removed UserControl from Task class * Update to-do-4.py cleanup * update step 5 import flet as ft * changed update method to before_update * removed UserControl from TodoApp class * cleanup * removed UserControl from Task class * task_status_change takes one argument * Update to-do-hello.py * todo app - removed async functions * changed main function * changed update to before_update * removed UserControl from Task * removed UserControl from TodoApp * changed style to theme_style for Text * Update calc1.py * calc2 * Update calc3.py * Update calc3.py * Update calc4.py * Styled controls for buttons * Update calc3.py * Update calc4.py * Update calc4.py * calc5 (to replace calc) * Update calc5.py * Update calc5.py * Update calc.py
1 parent 4356200 commit e564ee2

File tree

15 files changed

+1874
-1352
lines changed

15 files changed

+1874
-1352
lines changed

python/apps/todo/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
flet==0.10.1
1+
flet==0.22.1

python/apps/todo/todo.py

Lines changed: 61 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import flet as ft
22

33

4-
class Task(ft.UserControl):
4+
class Task(ft.Column):
55
def __init__(self, task_name, task_status_change, task_delete):
66
super().__init__()
77
self.completed = False
88
self.task_name = task_name
99
self.task_status_change = task_status_change
1010
self.task_delete = task_delete
11-
12-
def build(self):
1311
self.display_task = ft.Checkbox(
1412
value=False, label=self.task_name, on_change=self.status_changed
1513
)
@@ -52,30 +50,32 @@ def build(self):
5250
),
5351
],
5452
)
55-
return ft.Column(controls=[self.display_view, self.edit_view])
53+
self.controls = [self.display_view, self.edit_view]
5654

57-
async def edit_clicked(self, e):
55+
def edit_clicked(self, e):
5856
self.edit_name.value = self.display_task.label
5957
self.display_view.visible = False
6058
self.edit_view.visible = True
61-
await self.update_async()
59+
self.update()
6260

63-
async def save_clicked(self, e):
61+
def save_clicked(self, e):
6462
self.display_task.label = self.edit_name.value
6563
self.display_view.visible = True
6664
self.edit_view.visible = False
67-
await self.update_async()
65+
self.update()
6866

69-
async def status_changed(self, e):
67+
def status_changed(self, e):
7068
self.completed = self.display_task.value
71-
await self.task_status_change(self)
69+
self.task_status_change(self)
7270

73-
async def delete_clicked(self, e):
74-
await self.task_delete(self)
71+
def delete_clicked(self, e):
72+
self.task_delete(self)
7573

7674

77-
class TodoApp(ft.UserControl):
78-
def build(self):
75+
class TodoApp(ft.Column):
76+
# application's root control is a Column containing all other controls
77+
def __init__(self):
78+
super().__init__()
7979
self.new_task = ft.TextField(
8080
hint_text="What needs to be done?", on_submit=self.add_clicked, expand=True
8181
)
@@ -90,66 +90,63 @@ def build(self):
9090

9191
self.items_left = ft.Text("0 items left")
9292

93-
# application's root control (i.e. "view") containing all other controls
94-
return ft.Column(
95-
width=600,
96-
controls=[
97-
ft.Row(
98-
[ft.Text(value="Todos", style=ft.TextThemeStyle.HEADLINE_MEDIUM)],
99-
alignment=ft.MainAxisAlignment.CENTER,
100-
),
101-
ft.Row(
102-
controls=[
103-
self.new_task,
104-
ft.FloatingActionButton(
105-
icon=ft.icons.ADD, on_click=self.add_clicked
106-
),
107-
],
108-
),
109-
ft.Column(
110-
spacing=25,
111-
controls=[
112-
self.filter,
113-
self.tasks,
114-
ft.Row(
115-
alignment=ft.MainAxisAlignment.SPACE_BETWEEN,
116-
vertical_alignment=ft.CrossAxisAlignment.CENTER,
117-
controls=[
118-
self.items_left,
119-
ft.OutlinedButton(
120-
text="Clear completed", on_click=self.clear_clicked
121-
),
122-
],
123-
),
124-
],
125-
),
126-
],
127-
)
128-
129-
async def add_clicked(self, e):
93+
self.width = 600
94+
self.controls = [
95+
ft.Row(
96+
[ft.Text(value="Todos", theme_style=ft.TextThemeStyle.HEADLINE_MEDIUM)],
97+
alignment=ft.MainAxisAlignment.CENTER,
98+
),
99+
ft.Row(
100+
controls=[
101+
self.new_task,
102+
ft.FloatingActionButton(
103+
icon=ft.icons.ADD, on_click=self.add_clicked
104+
),
105+
],
106+
),
107+
ft.Column(
108+
spacing=25,
109+
controls=[
110+
self.filter,
111+
self.tasks,
112+
ft.Row(
113+
alignment=ft.MainAxisAlignment.SPACE_BETWEEN,
114+
vertical_alignment=ft.CrossAxisAlignment.CENTER,
115+
controls=[
116+
self.items_left,
117+
ft.OutlinedButton(
118+
text="Clear completed", on_click=self.clear_clicked
119+
),
120+
],
121+
),
122+
],
123+
),
124+
]
125+
126+
def add_clicked(self, e):
130127
if self.new_task.value:
131128
task = Task(self.new_task.value, self.task_status_change, self.task_delete)
132129
self.tasks.controls.append(task)
133130
self.new_task.value = ""
134-
await self.new_task.focus_async()
135-
await self.update_async()
131+
self.new_task.focus()
132+
self.update()
136133

137-
async def task_status_change(self, task):
138-
await self.update_async()
134+
def task_status_change(self, task):
135+
self.update()
139136

140-
async def task_delete(self, task):
137+
def task_delete(self, task):
141138
self.tasks.controls.remove(task)
142-
await self.update_async()
139+
self.update()
143140

144-
async def tabs_changed(self, e):
145-
await self.update_async()
141+
def tabs_changed(self, e):
142+
self.update()
146143

147-
async def clear_clicked(self, e):
144+
def clear_clicked(self, e):
148145
for task in self.tasks.controls[:]:
149146
if task.completed:
150-
await self.task_delete(task)
147+
self.task_delete(task)
151148

152-
async def update_async(self):
149+
def before_update(self):
153150
status = self.filter.tabs[self.filter.selected_index].text
154151
count = 0
155152
for task in self.tasks.controls:
@@ -161,16 +158,15 @@ async def update_async(self):
161158
if not task.completed:
162159
count += 1
163160
self.items_left.value = f"{count} active item(s) left"
164-
await super().update_async()
165161

166162

167-
async def main(page: ft.Page):
163+
def main(page: ft.Page):
168164
page.title = "ToDo App"
169165
page.horizontal_alignment = ft.CrossAxisAlignment.CENTER
170166
page.scroll = ft.ScrollMode.ADAPTIVE
171167

172168
# create app control and add it to the page
173-
await page.add_async(TodoApp())
169+
page.add(TodoApp())
174170

175171

176172
ft.app(main)

0 commit comments

Comments
 (0)