Pyqt5右键单击并在新选项卡中打开

时间:2018-01-06 09:59:29

标签: python-3.x pyqt5 qtwebengine

我有qwebengine,我已经用自定义弹出菜单覆盖了它的上下文菜单,我需要添加菜单项,当我右键单击一个url时,它给了我在新标签中打开的选项,我怎么能实现这一点?我不知道怎么做,所以我没有代码可以显示,并且没有足够的主题,但在qt简单broswer他们有下面的代码,但我不理解,因为我从来没有使用qt这里是示例:

void WebView::contextMenuEvent(QContextMenuEvent *event)
{
    QMenu *menu = page()->createStandardContextMenu();
    const QList<QAction*> actions = menu->actions();
    auto it = std::find(actions.cbegin(), actions.cend(), page()->action(QWebEnginePage::OpenLinkInThisWindow));
    if (it != actions.cend()) {
        (*it)->setText(tr("Open Link in This Tab"));
        ++it;
        QAction *before(it == actions.cend() ? nullptr : *it);
        menu->insertAction(before, page()->action(QWebEnginePage::OpenLinkInNewWindow));
        menu->insertAction(before, page()->action(QWebEnginePage::OpenLinkInNewTab));
    }
    menu->popup(event->globalPos());
} 

如果有人可以解释上面的代码并提供关于我如何在pyqt中实现它的简单片段,我会非常感激。

2 个答案:

答案 0 :(得分:2)

self.yourWidget_qwebengine.contextMenuEvent=self.mycontextMenuEvent

def mycontextMenuEvent(self, event):
        menu = QtWidgets.QMenu(self)
        oneAction = menu.addAction("&Open New Tab")
        twoAction = menu.addAction("O&pen in New Window")
        menu.exec_(event.globalPos())

如果您覆盖了上下文菜单事件

,添加此简单代码可能会有所帮助

答案 1 :(得分:2)

如果右键单击链接,请使用以下代码段获取地址:

self.page().contextMenuData().linkUrl()

其中self是QWebEngineView。您可以在网址上调用isEmpty()来测试它是否实际上是右键单击的链接。