Flet работа с классом
Подскажите пожалуйста, столько времени потерял но никак не получается, мало опыта в этом направлении, нужна ваша помощь
Есть файл pars.py, внутри две функции, первый он возвращает словарь с данными с сайта заказов еды, имя_еды, ссылка на фото еды, и ссылка на подкатегории, а вторая вызывается передавая в качестве аргумента ссылку на подкатегорию где уже списки с едой, вопросов 2 Описание еды длинное, внутри контейнера не помещается, я изучил документацию и что то делаю не то походу, нужно что бы описание переносилась на новую строку а не выходила за рамку контейнера 2 вопрос: мне нужно в коде добавить список корзины которое будут доьавлять пользователи, как мне сделать момент, проблема в том что список должна быть глобальной, нужно внутри метода класса добавлять в глобальный список еды, и при отмене удалить из списка, return вроде неполучилось, нужен другой подход
'''
import flet as ft
import pars
class Block(ft.Container):
def __init__(self, name, link, img, width = 300, height = 280):
super().__init__()
self.width = width
self.height = height
self.expand = True
self.margin = ft.margin.symmetric(vertical = 0)
self.padding = 1
self.border_radius = 10
self.bgcolor = ft.Colors.ORANGE_300
self.link = link
self.on_click = self.data_products
self.content = ft.Column([
ft.Image(img, cache_height = 300, expand=True),
ft.Row([
ft.Text(name),
], alignment = ft.MainAxisAlignment.CENTER) ])
def data_products(self, e):
self.page.clean()
self.page.scroll = True
self.page.bgcolor = ft.Colors.ORANGE_600
self.page.update()
data_screen = ft.View(
route = '/product',
scroll = True,
controls = [
ft.Text('str', size = 200)
])
self.page.go('/product')
def route_change(route):
#self.page.views.clear()
self.page.views.append(
data_screen
)
self.page.update()
self.page.on_route_change = route_change
row_cat = ft.Row([], spacing = 5)
col_cat = ft.Column([])
data_screen.controls.append(col_cat)
data = pars.data_product(self.link)
for n, d, p, i in zip(data['name'], data['desc'], data['price'], data['img']):
row_cat.controls.append(Product(n, d, p, i))
count_elements = 5 if self.page.width > self.page.height else 2
if len(row_cat.controls) == count_elements:
col_cat.controls.append(row_cat)
row_cat = ft.Row([], spacing = 5)
self.page.update()
class Product(ft.Container):
def __init__(self, name, desc, price, img, height = 400):
super().__init__()
self.height = height
self.expand = True
self.margin = ft.margin.only(bottom = 30)
self.border_radius = 10
self.bgcolor = ft.Colors.ORANGE_300
self.name = name
self.desc = desc
self.price = price
self.img = img
self.grocery_btn = ft.ElevatedButton('В корзину',
icon = ft.Icons.LOCAL_GROCERY_STORE,
on_click = self.add_grocery)
self.content = ft.Column([
ft.Image(img),
ft.Row([ft.Text(name, weight = ft.FontWeight.W_300),], alignment = ft.MainAxisAlignment.CENTER),
ft.Row([ft.Text(desc,
overflow = ft.TextOverflow.VISIBLE,
max_lines = 30,
italic=True),], alignment = ft.MainAxisAlignment.CENTER),
ft.Row([ft.Text(price, weight = ft.FontWeight.W_300, )], alignment = ft.MainAxisAlignment.CENTER),
ft.Row([self.grocery_btn], alignment = ft.MainAxisAlignment.CENTER)
], alignment = ft.MainAxisAlignment.SPACE_AROUND)
def add_grocery(self, e):
self.grocery_btn.text = 'В корзине' if self.grocery_btn=='В корзину' else 'В корзину'
self.grocery_btn.color = ft.Colors.GREEN_500 if self.grocery_btn==None or self.grocery_btn=='none' else 'none'
self.page.update()
def main(page):
page.bgcolor = ft.Colors.ORANGE_600
page.scroll = True
page.theme_mode = 'dark'
#ВЕРХНИЙ АППБАР
def back_icon_search(e):
page.appbar.actions = [ft.IconButton(ft.Icons.SEARCH, on_click = search_food)]
page.appbar.center_title = True
page.update()
search_food_btn = ft.TextField(label = 'Введите название',
prefix_icon = ft.Icons.SEARCH,
border = 'underline',
filled = True,
width = page.width//1.7,
height = 40,
on_blur = back_icon_search)
def search_food(e):
page.appbar.actions = [search_food_btn]
page.appbar.center_title = False
page.update()
search_food_btn.focus()
data_appbar = ft.AppBar(
bgcolor = ft.Colors.ORANGE_600,
title = ft.Text('Рандеву'),
center_title = True,
leading = ft.IconButton(ft.Icons.MENU),
actions = [ft.IconButton(ft.Icons.SEARCH, on_click = search_food)] )
page.appbar = data_appbar
data_bottom_appbar = ft.BottomAppBar(
bgcolor=ft.Colors.BLUE,
shape=ft.NotchShape.CIRCULAR,
content=ft.Row(
controls=[
ft.IconButton(icon=ft.Icons.MENU, icon_color=ft.Colors.WHITE),
ft.Container(expand=True),
ft.IconButton(icon=ft.Icons.SEARCH, icon_color=ft.Colors.WHITE),
ft.IconButton(icon=ft.Icons.FAVORITE, icon_color=ft.Colors.WHITE),
]),)
page.bottom_appbar = data_bottom_appbar
#Добавление категории на экран
row_cat = ft.Row([], spacing = 5)
col_cat = ft.Column([])
page.add(col_cat)
data = pars.data_category()
for n, l, i in zip(data['name'], data['link'], data['img']):
row_cat.controls.append(Block(n, l, i, width=page.width/5))
count_elements = 5 if page.width > page.height else 2
if len(row_cat.controls) == count_elements:
col_cat.controls.append(row_cat)
row_cat = ft.Row([], spacing = 5)
page.update()
ft.app(target=main)