如何在Python FMX GUI应用的Image控件中添加右键上下文菜单?
在DelphiFMX for Python中为Image组件添加右键上下文菜单的方法
我使用DelphiFMX GUI Library for Python创建了一个包含Image的Form,希望为该Image添加右键上下文菜单,右键点击时弹出类似VSCode右键菜单的弹窗。
原创建Form和Image的代码
import os from delphifmx import * class frmMain(Form): def __init__(self, owner): self.Caption = 'My Form with Image and Context Menu' self.Width = 1000 self.Height = 1000 self.imgDirt = Image(self) self.imgDirt.Parent = self self.imgDirt.Align = "Client" self.imgDirt.Margins.Top = 40 self.imgDirt.Margins.Left = 40 self.imgDirt.Margins.Right = 40 self.imgDirt.Margins.Bottom = 40 path = os.path.dirname(os.path.abspath(__file__)) self.imgDirt.Bitmap.LoadFromFile(path + '\dirt.png') def main(): Application.Initialize() Application.Title = "My Application" Application.MainForm = frmMain(Application) Application.MainForm.Show() Application.Run() Application.MainForm.Destroy() main()
遇到的问题
尝试以下代码时出现报错:NameError: name 'ContextMenu' is not defined
self.cm = ContextMenu(self) self.cm.Items.Add("Item 1") self.cm.Items.Add("Item 2") self.cm.Items.Add("Item 3")
使用self.cm = PopUpMenu(self)也出现同样的未定义错误。
解决方案
在DelphiFMX for Python中,右键菜单对应的正确组件是PopupMenu(注意大小写:首字母P大写,U大写),需要通过MenuItem创建具体菜单项,并将菜单关联到Image的PopupMenu属性上。
完整修改后的代码
import os from delphifmx import * class frmMain(Form): def __init__(self, owner): self.Caption = 'My Form with Image and Context Menu' self.Width = 1000 self.Height = 1000 self.imgDirt = Image(self) self.imgDirt.Parent = self self.imgDirt.Align = "Client" self.imgDirt.Margins.Top = 40 self.imgDirt.Margins.Left = 40 self.imgDirt.Margins.Right = 40 self.imgDirt.Margins.Bottom = 40 path = os.path.dirname(os.path.abspath(__file__)) self.imgDirt.Bitmap.LoadFromFile(path + '\dirt.png') # 创建右键菜单实例 self.popup_menu = PopupMenu(self) self.popup_menu.Parent = self # 创建并添加菜单项 # 菜单项1:复制 item_copy = MenuItem(self) item_copy.Text = "复制" item_copy.OnClick = self.handle_menu_click self.popup_menu.Items.Add(item_copy) # 菜单项2:保存图片 item_save = MenuItem(self) item_save.Text = "保存图片" item_save.OnClick = self.handle_menu_click self.popup_menu.Items.Add(item_save) # 菜单项3:退出 item_exit = MenuItem(self) item_exit.Text = "退出" item_exit.OnClick = self.handle_menu_click self.popup_menu.Items.Add(item_exit) # 将菜单绑定到Image组件 self.imgDirt.PopupMenu = self.popup_menu def handle_menu_click(self, sender): # 处理菜单项点击事件 ShowMessage(f"您点击了:{sender.Text}") def main(): Application.Initialize() Application.Title = "My Application" Application.MainForm = frmMain(Application) Application.MainForm.Show() Application.Run() Application.MainForm.Destroy() main()
关键要点说明
- 组件名称必须准确:DelphiFMX中右键菜单的组件是
PopupMenu,而非ContextMenu或PopUpMenu(注意大小写) - 菜单项需要通过
MenuItem类创建,设置Text属性定义显示文字,OnClick属性绑定点击事件处理函数 - 将创建好的
PopupMenu赋值给Image的PopupMenu属性,右键点击Image时就会自动弹出菜单 - 可以在点击事件处理函数中实现具体的业务逻辑,比如复制图片、保存图片等操作
内容的提问来源于stack exchange,提问作者Shaun Roselt
相关产品推荐
相关产品推荐

