首页 > 其他分享 >[FLET] 01 可以拖动的方块

[FLET] 01 可以拖动的方块

时间:2022-09-23 01:55:04浏览次数:43  
标签:01 chd 拖动 self FLET value content fam row

from typing import List
import flet
from flet import (
    Container,
    Draggable,
    DragTarget,
    Page,
    Row,
    Text,
    alignment,
    colors,
    control_event,
)


class m_item:
    value: int
    name: str
    color: str

    def __init__(self, name: str, value: int = 0) -> None:
        self.name = str(name)
        self.value = value
        self.color = colors.CYAN_ACCENT_100


class m_family:
    def __init__(self) -> None:
        self.chd: List[m_item] = []
        for i in range(10):
            m = m_item(f"n_{i}", i)
            if i % 2 == 0:
                m.color = colors.PINK_100
            self.chd.append(m)

    def get_by_value(self, v: int):
        for i in range(len(self.chd)):
            if self.chd[i].value == v:
                return (i, self.chd[i])
        return None


class page_one:
    def __init__(self, page: Page) -> None:

        page.title = "Drag and Drop example 2"
        self.page = page
        self.fam = m_family()
        self.ui_row = Row([])

    def make_row(self):
        ll = len(self.fam.chd)
        self.ui_row.controls.clear()
        for i in range(ll):
            mvv = self.fam.chd[i]
            self.ui_row.controls.append(
                Draggable(
                    group="number",
                    content=DragTarget(
                        group="number",
                        content=Container(
                            width=50,
                            height=50,
                            bgcolor=mvv.color,
                            border_radius=5,
                            content=Text(f"{mvv.value}", size=20),
                            alignment=alignment.center,
                        ),
                        on_accept=self.drag_accept,
                        on_will_accept=self.drag_will_accept,
                        on_leave=self.drag_leave,
                    ),
                    content_when_dragging=Container(
                        width=50,
                        height=50,
                        bgcolor=colors.BLUE_GREY_200,
                        border_radius=5,
                    ),
                ),
            )
            if i < ll - 1:
                self.ui_row.controls.append(
                    Container(width=10),
                )

    def update_row(self):
        ct = 0
        for i in self.ui_row.controls:
            if isinstance(i, Draggable):
                i.content.content.content.value = str(self.fam.chd[ct].value)
                i.content.content.bgcolor = self.fam.chd[ct].color
                ct += 1

    def drag_accept(self, e: control_event.ControlEvent):

        src: Draggable = self.page.get_control(e.data)
        tar: DragTarget = self.page.get_control(e.target)
        src_value = int(src.content.content.content.value)
        tar_value = int(tar.content.content.value)

        ia, _ = self.fam.get_by_value(src_value)
        ib, _ = self.fam.get_by_value(tar_value)
        self.fam.chd[ia], self.fam.chd[ib] = self.fam.chd[ib], self.fam.chd[ia]

        self.update_row()
        self.ui_row.update()

    def drag_will_accept(self, e: control_event.ControlEvent):
        print("drag_will_accept")
        e.control.update()

    def drag_leave(self, e: control_event.ControlEvent):
        print("drag_leave")
        e.control.update()


def main(page: Page):
    vvv = page_one(page)
    vvv.make_row()
    page.add(vvv.ui_row)


flet.app(target=main)

标签:01,chd,拖动,self,FLET,value,content,fam,row
From: https://www.cnblogs.com/unm001/p/16721397.html

相关文章

  • P2822 [NOIP2016 提高组] 组合数问题
    P2822[NOIP2016提高组]组合数问题题解作者岛田小雅这是一道复杂度非常容易爆炸的问题。我看到这题的第一眼,第一反应是直接按照公式暴力跑。我们看一眼数据范围。如......
  • P1078 [NOIP2012 普及组] 文化之旅
    https://www.luogu.com.cn/problem/P1078搜索,图论,剪枝,最短路绿色题思路一:搜索1.输入,建边,用一个数组存储已经学习的文化,2.搜索,以当前的点now去看能走到哪些边,......
  • [NOIP2001 提高组] 统计单词个数
    [NOIP2001提高组]统计单词个数题目描述给出一个长度不超过\(200\)的由小写英文字母组成的字母串(该字串以每行\(20\)个字母的方式输入,且保证每行一定为\(20\)个)。......
  • 9.22 DAY 01
    记录一下读的文献,以便日后翻阅。读论文:2020_NeurIPS_RegionAttentionNetworkforSemanticSegmentation关键词记录Method:使用区域上下文关系,建立起像素之间的空间(sp......
  • 洛谷 P1025 [NOIP2001 提高组] 数的划分 (dfs)
    https://www.luogu.com.cn/problem/P1025给定一个n和k,把n拆分成k个数字的和,数字可以相同,但是种类不能相同。求能凑出的数量。输入73输出4明明是一道很简单的dfs,......
  • [JSOI2010]冷冻波
    [JSOI2010]冷冻波题目描述WJJ喜欢“魔兽争霸”这个游戏。在游戏中,巫妖是一种强大的英雄,它的技能FrozenNova每次可以杀死一个小精灵。我们认为,巫妖和小精灵都可以看成是......
  • CVE-2017-0143(永恒之蓝)漏洞复现By metasploit
    一、永恒之蓝介绍永恒之蓝是在Windows的SMB服务处理SMBv1请求时发生的漏洞,这个漏洞导致攻击者在目标系统上可以执行任意代码。通过永恒之蓝漏洞会扫描开放445文件共享端......
  • 2019 ICPC Malaysia National C. I Don't Want To Pay For The Late Jar!
    2019ICPCMalaysiaNational翻译岛田小雅C.IDon'tWantToPayForTheLateJar!出题人IT支持部门的Nina小姐需要你解决一个生活中的小问题。她可以在任何时刻......
  • P3530 [POI2012]FES-Festival
    传送门思路对于第一种限制,我们连接\((x,y)=1\),\((y,x)=-1\)对于第二种限制,我们连接\((x,y)=0\)如果一个图只有第一种边,那么要么就是没有解(有环),要么答案就是点的个数......
  • PAT (Basic Level) Practice 1013 数素数 分数 20
    令 Pi​ 表示第 i 个素数。现任给两个正整数 M≤N≤104,请输出 PM​ 到 PN​ 的所有素数。输入格式:输入在一行中给出 M 和 N,其间以空格分隔。输出格式:输......