こちらの続きです。
D&Dで入れ替わるリストビュー2 - C#ATIA
欲しかった動作が出来たような気がします。
左はいそのグループで、右はさくらグループです。
あぁ境界線ぐらい設けるべきでしたね。
お互いのグループ内での入れ替えはOKです。
しかし、いそのグループからさくらグループへは
移動と言いますか受け入れますが、
さくらグループからいそのグループへの
移動は禁止です。
つまり、入れ替えではなく侵略していきます。
非情と言いますか無慈悲と言いますか、よりによって
主人公から消し去るなんて・・・。
さくらグループに未来があるのでしょうか?
これを行うサンプルはこちらです。
# python using-flet import flet as ft class DragAndDropItem(ft.UserControl): def __init__(self, group: str, value: str, isDropOnly: bool = False): super().__init__() self.group = group self.vaule = value self.isDropOnly = isDropOnly def build(self): self.view = ft.Draggable( group = self.group, content = ft.DragTarget( group = self.group, content = ft.Text( self.vaule, size = 50, data = self.isDropOnly #dataにドロップオンリーの印を付ける ), 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 == target.data: # お互いのタイプが一致 target.value, src.value = src.value, target.value elif not src.data and target.data: # ドロップされる側がドロップオンリーの場合のみ受け入れる target.value = src.value src.update() target.update() def main(page: ft.Page): page.title = "Drag and drop test" groupName = "test" isonoGrp = [ "さざえ", "かつお", "わかめ", "たら", ] sakuraGrp = [ "まるこ", "たま", "はまじ", "みぎわ", ] isonolistView = ft.ListView( expand=1, spacing=20, padding=20, auto_scroll = True ) [isonolistView.controls.append(DragAndDropItem(groupName, t)) for t in isonoGrp] sakuralistView = ft.ListView( expand=1, spacing=20, padding=20, auto_scroll = True ) [sakuralistView.controls.append(DragAndDropItem(groupName, t, True)) for t in sakuraGrp] page.add( ft.Row( controls=[ isonolistView, sakuralistView, ] ) ) page.update() ft.app(target = main)
お互い人類の夢 "不老不死" を手に入れたにも関わらず、
この様な運命となる事に心痛みます。
(本当は同一グループの入れ替えOKで、片側のD&Dは値の反映が
目的です)
恐るべし磯野家!(正しくは2名はフグ田家)