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,
),
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: flet.DragTargetAcceptEvent): src: Draggable = self.page.get_control(e.src_id)
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):
e.control.update() def main(page: Page):
vvv = page_one(page)
vvv.make_row()
page.add(vvv.ui_row) flet.app(target=main)

[FLET] 01 可以拖动的方块的更多相关文章

  1. 手把手教你做一个原生js拖动滑块【兼容PC和移动端】

    废话少说: 在PC端可以用mousedown来触发一个滑块滑动的效果,但在手机上,貌似无法识别这个事件,但手机上有touchstart事件,可以通过一系列"touch"事件来替代P ...

  2. 原生js移动端可拖动进度条插件

    该插件最初的想法来自网上的一篇文章,直达链接:https://www.cnblogs.com/libin-1/p/6220056.html 笔者因为业务需要寻找到这个插件,然后拿来用之,发现各种不方便 ...

  3. 刷题总结——mayan游戏(NOIP2011提高组day2T3)

    题目: 题目背景 NOIP2011提高组 DAY1 试题. 题目描述 Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个 7 行 5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...

  4. Pr剪辑

    目录 Pr剪辑教程 入门基础 创建序列类别 处理非正常序列 导出文件 导出设置 导入各类别素材 简单使用: 剪辑素材常用方法 剃刀工具 选择工具 波纹编辑工具 打入点和出点 剪辑速度 整个素材视频速度 ...

  5. JavaScript动画-模拟拖拽

    模拟拖拽的原理: x1等于div.offsetLeft y1等于div.offsetTop x2等于ev.clientX(ev表示event事件) y2等于ev.clientY 当我们在方块上按下鼠标 ...

  6. 使用SignalR实现即时通讯功能

    教程简介 SignalR的好处是可以让多个客户端之间进行互动,比如这篇教程就展示了当你在页面上拖动矩形方块的同时,其它打开这个页面的用户也将会看到你拖动的轨迹以及最终的结果,当然他们也可以通过拖动该方 ...

  7. [NOIP2011]Mayan游戏 题解

    题目大意: 有一个5*7的方格,上面有几种颜色的方块,如果在一横行或者竖列上有连续三个或者三个以上相同颜色的方块,则它们将立即被消除,方块消除之后,消除位置之上的方块将掉落.每步移动可以且仅可以沿横向 ...

  8. NOIp 2011 mayan游戏 搜索

    题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...

  9. 60行JS实现俄罗斯方块

    参考文献:http://www.cnblogs.com/jimaojin/p/5413857.html 原版: <!doctype html><html><head> ...

  10. [NOIP2011] mayan游戏(搜索+剪枝)

    题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...

随机推荐

  1. 【RMAN】一些参数温故知新

    RMAN全局参数: CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 21 DAYS 这样相当于保留备份的窗口为21天,说明,从今天起的前21天的数据都 ...

  2. Linux中的info page

    Linux系统中除了使用man来查询命名或者相关文件的用法,还可以使用info命令.与man命令不同的是,info命令将数据拆成一个一个段落,每个段落使用单独的页面编写,同时页面中还有类似超链接的功能 ...

  3. ansible系列(33)--ansible实战之部署WEB集群架构(3)

    目录 1. 应用环境部署 1.1 nginx编译部署 1.2 PHP编译部署 1.3 mariadb二级制部署 1.4 redis部署 1.5 NFS部署 1.6 keepalived+LVS部署 1 ...

  4. debug技巧之本地调试

    大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦. 如果看过我文章的同学应该知道我是一个Java开发 ...

  5. Vue3学习(二十四)- 文档页面功能开发

    写在前面 这部分真的感觉超级难,其实也不能说难,主要是真的想不到这个思路应该这么做,或者说他好厉害,他怎么知道该这么设计实现. 说下难点吧,我觉得后天逻辑还好,主要是前端部分真的需要点花点时间来思考, ...

  6. c语言在Linux中的使用

    gcc版本升级 如何验证gcc正常使用,编译c以及运行 过程 要验证GCC(GNU Compiler Collection)是否正常使用,您可以按照以下步骤进行操作: 检查GCC是否安装:打开终端或命 ...

  7. MLP实现波士顿房屋价格回归任务

    1. 数据集 波士顿房屋价格.csv文件,文件中的数据有可能不完整,部分数据如下: CRIM, ZN ,INDUS ,CHAS,NOX,RM,AGE,DIS,RAD,TAX,PTRATIO,LSTAT ...

  8. C# Afroge摄像头翻转90

    1.dll和命名空间就不在此列举了,如下只是将转换方法介绍: 第一个函数: public void Rotate90() { // 计算角度,类变量 //dAngle = dAngle + 90; / ...

  9. 给师妹写的《Java并发编程之线程池十八问》被表扬啦!

    写在开头     之前给一个大四正在找工作的学妹发了自己总结的关于Java并发中线程池的面试题集,总共18题,将之取名为<Java并发编程之线程池十八问>,今天聊天时受了学妹的夸赞,心里很 ...

  10. FreeRTOS例程开发

    环境配置 下载官方源码 https://www.freertos.org/ 找到这个,他就是visual studio示例demo,我们主要在这个的基础上修改 下载visio studio https ...