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. java代码审计跨站脚本(XSS)--反射型

    一.基础:跨站脚本(Xss) 一.原理: 恶意攻击者往web页面里插入恶意js代码,而在服务端没有对数据进行严格的过滤.当用户浏览页面时,js代码必须在该html页面中(hrml必须要存在这个而已艾玛 ...

  2. 用 Certbot-auto 在 letsencrypt.org申请免费 SSL 证书实现 HTTPS

    参考帖子 https://www.cnblogs.com/lzpong/p/6433189.html https://www.cnblogs.com/756623607-zhang/p/1163850 ...

  3. 使用c#强大的表达式树实现对象的深克隆

    一.表达式树的基本概念 表达式树是一个以树状结构表示的表达式,其中每个节点都代表表达式的一部分.例如,一个算术表达式 a + b 可以被表示为一个树,其中根节点是加法运算符,它的两个子节点分别是 a ...

  4. C语言:学生成绩排名----冒泡排序

    题目: /*     输入10个学生成绩.     计算总分以及平均分数.     求出高于等于平均分的人数.     再按降序(由大到小)排序成绩并输出      */ 用到的冒泡算法代码模板: / ...

  5. Java静态变量在静态方法内部无法改变值

    一.如何解决"Java静态变量在静态方法内部无法改变值"的问题 在Java中,静态变量(也称为类变量)属于类本身,而不是类的任何特定实例.它们可以在没有创建类的实例的情况下访问和修 ...

  6. java练习项目——记账本

    包含登录.注册.记账.每日账单查看.每月报表.添加记账类型这些功能.数据存储采用的是txt文档+xml文档.程序是一个控制台程序,用IntelliJ IDEA+jdk8开发.涉及到的知识有List集合 ...

  7. objectarx 天正的墙转梁线

    黄色的线是天正建筑2014画出来的墙炸开后的样子,炸开后全是AcDbLine.可以看到这个黄色的线在拐弯处,交叉处会出现多余的小线段,并且是不连续的,或者是超出了缺口,想要把它转变成梁就需要考虑这些因 ...

  8. Vue cli使用Element UI

    当前的测试环境如下: ---- 新版的@vue/cli ---- Vue2.x版本 第一步:安装Element UI npm i element-ui -S 第二步:引入Element UI 在mai ...

  9. CSS——动画

    @keyframes 规则 要创建 CSS 动画,您首先需要了解 @keyframes 规则,@keyframes 规则用来定义动画各个阶段的属性值,类似于 flash 动画中的关键帧,语法格式如下: ...

  10. Swift全局变量的线程安全分析

    一.示例代码 import UIKit let obj = TestObj() class TestObj { init() { print("\(type(of: self)) init& ...