pyqt5在wight中的Qtextbrowser右击重建菜单,菜单位置不在鼠标右侧
时间: 2024-04-16 19:26:49 浏览: 90
修复右键菜单
4星 · 用户满意度95%
如果在QWidget中的QTextBrowser上实现右击重建菜单时,菜单位置不正确,可能是因为使用了错误的坐标。您可以通过QContextMenuEvent中的pos()方法获取右击事件的局部坐标,并使用mapToGlobal()方法将其转换为全局坐标。下面是修正后的示例代码:
```python
from PyQt5.QtWidgets import QApplication, QWidget, QTextBrowser, QMenu, QAction
from PyQt5.QtCore import Qt
class CustomWidget(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.textBrowser = QTextBrowser(self)
self.textBrowser.setContextMenuPolicy(Qt.CustomContextMenu)
self.textBrowser.customContextMenuRequested.connect(self.showContextMenu)
def showContextMenu(self, pos):
menu = QMenu(self)
rebuildAction = QAction("重建菜单", self)
rebuildAction.triggered.connect(self.rebuildMenu)
menu.addAction(rebuildAction)
globalPos = self.textBrowser.mapToGlobal(pos) # 将局部坐标转换为全局坐标
menu.exec_(globalPos)
def rebuildMenu(self):
# 在此处添加重建菜单的代码
print("重建菜单")
if __name__ == '__main__':
app = QApplication([])
widget = CustomWidget()
widget.show()
app.exec_()
```
修正后的代码中,我们在showContextMenu方法中使用mapToGlobal()方法将右击事件的局部坐标pos转换为全局坐标globalPos,然后将其作为参数传递给menu.exec_()方法。
使用修正后的代码运行,您应该能够在CustomWidget中右击,菜单将正确显示在鼠标右侧。您可以根据需要修改rebuildMenu方法来重新创建您想要的菜单。
阅读全文