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. Plumed分子模拟后分析

    技术背景 在前面的几篇博客中,我们分别介绍过Histogram算法的使用.Plumed安装与简单使用.Plumed一般就是两种用法:要么在运行分子动力学模拟的过程中实时的对接,要么就是把分子模拟的相关 ...

  2. linux 下jq的使用

    安装: yum install jq -y 文档: https://stedolan.github.io/jq/manual/ 更多: https://blog.csdn.net/Cheat11730 ...

  3. gorm 关系一对一,一对多,多对多查询

    gorm 关系一对一,一对多,多对多查询 gorm v2版本 Belongs To mysql表 CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_IN ...

  4. Selenium4自动化测试2--元素定位By.ID,By.CLASS_NAME,By.TAG_NAME

    三.元素定位方式 1-通过id定位,By.ID id属性在HTML中是唯一的,因此使用id定位可以确保找到页面上唯一的元素. 由于id是唯一的,浏览器在查找元素时可以快速定位到目标元素,提高了定位的效 ...

  5. String.split()遇到空字符串不解析的情况

    1.split的api说明 stringObj.split([separator,[limit]]) stringObj:要被分解的 String separator:字符串或正则表达式对象 limi ...

  6. C#实现多线程的几种方式

    前言 多线程是C#中一个重要的概念,多线程指的是在同一进程中同时运行多个线程的机制.多线程适用于需要提高系统并发性.吞吐量和响应速度的场景,可以充分利用多核处理器和系统资源,提高应用程序的性能和效率. ...

  7. 记一次Nacos漏洞的复现 --> 身份认证绕过漏洞(QVD-2023-6271)

    前记 端午前两天,遇到公司某客户的站点是Nacos,随后就是网上搜一波漏洞,搜到 QVD-2023-6271,故做以下记录 漏洞复现 漏洞描述 漏洞原理为开源服务管理平台 Nacos在默认配置下未对 ...

  8. uni-app前端图表组件库,折线图横屏android失败的解决办法

    网址:https://www.ucharts.cn/v2/#/demo/index,需要登录,微信就可以 我在使用折现图时,业务需要把曲线图在点击全屏时横屏全屏显示.就做个全屏页面,点击后,把opti ...

  9. elementui table tree懒加载只能执行一次的解决办法

    绑定 table的:key为随机值,在每次查询更新table时,更改key,就能刷新 table tree 懒加载只能第一次有效的问题, 本来那个懒加载只能执行一次,即使重新绑定了数据列表,再展开,也 ...

  10. 使用EntityFramework Core和Enums作为字符串的ASP.NET Core Razor页面——第三部分

    目录 介绍 使用代码 添加项目和项目状态处理 下载源文件 - 989.1 KB 介绍 这是一篇由多部分组成的文章的第三部分,演示了通过EntityFramework Core 2.1(EF)将C#en ...