コントロールにコンテキストメニュー(右クリックのメニュー)を
追加したい。最悪、出来ない様であればボタンを配置しますが、
イチイチボタンを配置するとスペースが狭くなるので避けたいのが
本音です。
コントロールそのものにコンテキストメニューを表示する機能が見当たらないので
何かを被せて行います。
探した所、GestureDetectorが該当しそうです。
GestureDetector | Flet
苦労の末、こんな感じで右クリックを拾えました。
(ドラッグ時の左クリックには反応しません)
import flet as ft def main(page: ft.Page): def on_context_menu(e: ft.TapEvent): print("hoge") drag = ft.Draggable( group = "test", content = ft.Text( "右クリックして!", size = 20, ), ) gd = ft.GestureDetector( mouse_cursor = ft.MouseCursor.CONTEXT_MENU, on_secondary_tap_up = on_context_menu, left = 100, top = 100, content = drag, ) # page.add(gd) <-これNG page.add(ft.Stack([gd])) ft.app(target=main)
GestureDetectorは、Stack内でないとエラーになりました。理由が良く分かって
いないのですが。
目的の要素はDraggableを持っている為ややこしい状態ですが、ドラッグも可能で
右クリックも拾えています。
DragTargetが無いので、ドロップできるか試していませんが、まぁ出来るでしょう。
右クリックは拾えたのですが、肝心のメニュー相当の物をどうやって表示させれば
良いものか・・・。
試しにこんな感じで、無理無理入れましたがエラーでした。
def on_context_menu(e: ft.TapEvent): print("hoge") piyo = ft.Text("piyo") e.page.controls.append( ft.Stack( ft.Column( controls=[piyo] ) ) ) piyo.update()
どうすれば・・・アラートか?