こちらの続きです。
D&Dで入れ替わるリストビュー3 - C#ATIA
ほぼ進展ないのですが、コントロールのdataに文字列ではなく、
オブジェクト的なものを代入出来るものかどうかをテストしました。
# python using-flet import flet as ft class Character(): def __init__(self, name: str, isDropOnly: bool = False) -> None: self.name = name self.isDropOnly = isDropOnly def get_name(self) -> str: return self.name def is_dropOnly(self) -> bool: return self.isDropOnly class DragAndDropItem(ft.UserControl): def __init__(self, group: str, value: Character): super().__init__() self.group = group self.vaule = value def build(self): self.view = ft.Draggable( group = self.group, content = ft.DragTarget( group = self.group, content = ft.Text( self.vaule.get_name(), size = 20, data = self.vaule, ), on_accept = self._drag_accept, ) ) return self.view def _drag_accept(self, e: ft.DragTargetAcceptEvent): ''' ドラッグもドロップもOK ''' src = e.page.get_control(e.src_id).content.content target = e.page.get_control(e.target).content if src.data.is_dropOnly() == target.data.is_dropOnly(): # お互いのタイプが一致 target.data, src.data = src.data, target.data elif not src.data.is_dropOnly() and target.data.is_dropOnly(): # ドロップされる側がドロップオンリーの場合のみ受け入れる target.data = src.data self._update_control(src) self._update_control(target) def _update_control(self, control) -> None: control.value = control.data.get_name() control.update() def main(page: ft.Page): page.title = "Drag and drop test" groupName = "test" isonoGrp = [ Character("さざえ"), Character("かつお"), Character("わかめ"), Character("たらお"), ] sakuraGrp = [ Character("まるこ", True), Character("たまえ", True), Character("はまじ", True), Character("みぎわ", True), ] isonolistView = ft.ListView( expand=1, spacing=20, padding=20, auto_scroll = True ) [isonolistView.controls.append(DragAndDropItem(groupName, c)) for c in isonoGrp] sakuralistView = ft.ListView( expand=1, spacing=20, padding=20, auto_scroll = True ) [sakuralistView.controls.append(DragAndDropItem(groupName, c)) for c in sakuraGrp] page.add( ft.Row( controls=[ isonolistView, sakuralistView, ] ) ) page.update() ft.app(target = main)
こちらにチラッと記載したコントロール自体のスワップが
出来ない為の代案です。
D&Dで入れ替わるリストビュー2 - C#ATIA