[FLET] 01 可以拖动的方块
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 可以拖动的方块的更多相关文章
- 手把手教你做一个原生js拖动滑块【兼容PC和移动端】
废话少说: 在PC端可以用mousedown来触发一个滑块滑动的效果,但在手机上,貌似无法识别这个事件,但手机上有touchstart事件,可以通过一系列"touch"事件来替代P ...
- 原生js移动端可拖动进度条插件
该插件最初的想法来自网上的一篇文章,直达链接:https://www.cnblogs.com/libin-1/p/6220056.html 笔者因为业务需要寻找到这个插件,然后拿来用之,发现各种不方便 ...
- 刷题总结——mayan游戏(NOIP2011提高组day2T3)
题目: 题目背景 NOIP2011提高组 DAY1 试题. 题目描述 Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个 7 行 5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...
- Pr剪辑
目录 Pr剪辑教程 入门基础 创建序列类别 处理非正常序列 导出文件 导出设置 导入各类别素材 简单使用: 剪辑素材常用方法 剃刀工具 选择工具 波纹编辑工具 打入点和出点 剪辑速度 整个素材视频速度 ...
- JavaScript动画-模拟拖拽
模拟拖拽的原理: x1等于div.offsetLeft y1等于div.offsetTop x2等于ev.clientX(ev表示event事件) y2等于ev.clientY 当我们在方块上按下鼠标 ...
- 使用SignalR实现即时通讯功能
教程简介 SignalR的好处是可以让多个客户端之间进行互动,比如这篇教程就展示了当你在页面上拖动矩形方块的同时,其它打开这个页面的用户也将会看到你拖动的轨迹以及最终的结果,当然他们也可以通过拖动该方 ...
- [NOIP2011]Mayan游戏 题解
题目大意: 有一个5*7的方格,上面有几种颜色的方块,如果在一横行或者竖列上有连续三个或者三个以上相同颜色的方块,则它们将立即被消除,方块消除之后,消除位置之上的方块将掉落.每步移动可以且仅可以沿横向 ...
- NOIp 2011 mayan游戏 搜索
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
- 60行JS实现俄罗斯方块
参考文献:http://www.cnblogs.com/jimaojin/p/5413857.html 原版: <!doctype html><html><head> ...
- [NOIP2011] mayan游戏(搜索+剪枝)
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
随机推荐
- 【Python自动化】定时自动采集,并发送微信告警通知,全流程案例讲解!
目录 一.概要 二.效果演示 三.代码讲解 3.1 爬虫采集行政处罚数据 3.2 存MySQL数据库 3.3 发送告警邮件&微信通知 3.4 定时机制 四.总结 一.概要 您好!我是@马哥py ...
- Google C++ 语言规范
1. 命名空间 KeyNotes: 鼓励在.cc文件里使用匿名命名空间或者sttic声明 禁止使用内联命令空间,X::Y::foo 等价与X::foo.其主要用于跨版本的ABI兼容问题 namespa ...
- fastposter发布1.4.3 跨语言的海报生成器
fastposter发布1.4.3 跨语言的海报生成器 v1.4.3 增加golang语言支持,优化生成器代码,完善官方文档 昨天喝了点小9️⃣,发版慢了些. future: 增加golang语言支持 ...
- NODEJS通过发送json数据查询目标服务,实现服务器状态监控,发现异常发送到微信群提醒
root@aea87fa6e6a2:/home/node# cat login2.js const request = require('request-promise'); const moment ...
- linux 文件的特殊权限:suid sgid sticky
目录 一.关于文件的特殊权限 二.suid 三.SGID 四.Stickybit 一.关于文件的特殊权限 1.文件与目录设置不止基础权限:r,w,x,还有所谓的特殊权限.特殊权限会拥有一些" ...
- SuperSocket AppServer.NewRequestReceived 不触发 接受不到字节
SuperSocket AppServer.NewRequestReceived 不触发 接受不到字节 针对.netframework版本 1.6.* 使用 FixedHeaderReceiveFil ...
- FFmpeg Batch AV Converter 2.2.2 官方版
基本简介 FFmpeg Batch AV Converter官方版是一款Windows FFmpeg用户的前端程序,FFmpeg Batch AV Converter最新版允许使用FFmpeg命令行的 ...
- k8s——deployment
创建deployment [root@master deploy]# kubectl create deploy nginx-deploy --image=nginx:1.7.9 deployment ...
- Linux设备驱动--阻塞与非阻塞I/O
注:本文是<Linux设备驱动开发详解:基于最新的Linux 4.0内核 by 宋宝华 >一书学习的笔记,大部分内容为书籍中的内容. 书籍可直接在微信读书中查看:Linux设备驱动开发详解 ...
- wireshark常见使用技巧
(1)wireshark根据报文不同字段排序 举例说明:现在有50000个1588 sync报文,我想根据报文的originalTimestamp(seconds)字段进行排序,该如何操作呢? 操作过 ...