我正在尝试向文本框中添加功能,用户可以在其中突出显示单词,右键单击并能够选择是否为突出显示的单词定义或获取同义词。我编写了一个上下文菜单,但它仅在我单击文本框外部时才会显示。无论如何我可以添加功能到默认上下文菜单,包括复制,粘贴等?这是我的上下文菜单的代码。
self.setContextMenuPolicy(Qt.ActionsContextMenu)
defineAction = QtWidgets.QAction("Define", self)
defineAction.triggered.connect(lambda: self.define(event))
self.addAction(defineAction)
synonymAction = QtWidgets.QAction("Find Synonyms", self)
synonymAction.triggered.connect(lambda: self.synonym(event))
self.addAction(synonymAction)
答案 0 :(得分:1)
您需要对文本编辑小部件进行子类化并覆盖createStandardContextMenu(point)
。
在重写的方法中,调用基本调用实现以获取标准上下文菜单对象(它返回QMenu
)。使用自定义操作修改此菜单,然后返回菜单。
当用户请求上下文菜单时,将调用该函数。
有关详细信息,请参阅http://doc.qt.io/qt-5/qplaintextedit.html#createStandardContextMenu
编辑:您可以像这样继承
class MyTextEdit(QLineEdit):
def createStandardContextMenu(self, menu):
#as above, reimplement this method
然后在创建GUI时使用该类而不是QLineEdit
。
或者我记得有一个名为customContextMenuRequested
的信号。你可以像这样使用它
#assume you have the textbox in a variable called self.my_textbox
self.my_textbox.setContextMenuPolicy(Qt.CustomContextMenu)
self.my_textbox.customContextMenuRequested.connect(self.generate_context_menu)
然后将类添加到生成GUI的类中:
def generate_context_menu(self, location):
menu = self.my_textbox.createStandardContextMenu()
# add extra items to the menu
# show the menu
menu.popup(self.mapToGlobal(location))