相关疑难解决方法(0)

在PyQt5中缺少menuBar

我一直在使用PyQt5开发GUI,并希望包含一个菜单栏.但是,当我编写此功能时,我的菜单不会出现.弄清楚我对如何在PyQt5中实现菜单栏的理解是关闭的,我在网上找了一个预先存在的例子.通过一些调整,我开发了以下测试用例:

import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenuBar, QAction, qApp

class Example(QMainWindow):

    def __init__(self):
        super().__init__()

        exitAction = QAction(QIcon('exit.png'), '&Exit', self)
        exitAction.triggered.connect(qApp.quit)

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&Testmenu')
        fileMenu.addAction(exitAction)

        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

然而,当我运行它时,Testmenu无处可寻.

我还尝试在QTCreator中创建菜单栏(以及我的GUI布局的其余部分),然后使用pyuic5将.ui文件转换为可导入的.py文件.我认为这会消除我的一些编程错误,但菜单栏仍然不会显示.有什么想法吗?

编辑:

我在Jupyter笔记本4.1版本中使用Python 3.5(Anaconda 4.1)运行此代码.我也在使用运行os 10.1l,PyQt 5.7和Qt 5.7.0版本的Macbook.

我已经意识到,如果我单击应用程序窗口然后单击返回窗口,菜单栏将变为响应 - 有效地不聚焦并聚焦应用程序.有了这些信息,我意识到我不是第一个注意到这个问题的人(见https://github.com/robotology/yarp/issues/457).不幸的是,我仍然不确定如何解决这个问题.

python macos pyqt menubar pyqt5

7
推荐指数
3
解决办法
5918
查看次数

Qt:更改 Mac OS X 上的应用程序 QMenuBar 内容

我的应用程序对多个“页面”使用 QTabWidget,其中顶级菜单根据用户所在的页面而变化。

我的问题是,尝试重新创建菜单栏的内容会导致严重的显示问题。它在除 Mac OS X 之外的所有平台上按预期使用第一种和第三种样式(尚未测试第二种,但我不想使用该样式)。

第一个菜单是按照我在应用程序中创建的大多数方式创建的,并且它们收到正确的标题,但在重新创建菜单后立即消失。

第二个菜单出现在菜单栏的初始填充和重新填充上,但在这两种情况下都具有标签“无标题”。第二个菜单的样式只是在尝试解决此问题时创建的,因此这是我能够保留菜单的唯一方法。

第三个动态菜单永远不会出现,就这样。我使用这种样式来动态填充即将显示的菜单。

我尝试删除 QMenuBar 并重新创建一个

m_menuBar = new QMenuBar(0);
Run Code Online (Sandbox Code Playgroud)

并使用它来代替m_menuBar->clear()但它具有相同的行为。

我没有足够的声誉来内嵌发布图像,所以我将包含 imgur 链接:

启动行为: https: //i.stack.imgur.com/V4N6O.png

发布按钮点击行为 https://i.stack.imgur.com/fytDc.png

我创建了一个最小的示例来在带有 Qt 5.3 的 Mac OS X 10.9.4 上重现此行为。

主窗口.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    m_menuBar = new QMenuBar(0);
    m_dynamicMenu = new QMenu("Dynamic");
    connect(m_dynamicMenu, SIGNAL(aboutToShow()), this, SLOT(updateDynamicMenu()));

    changeMenuBar();

    QPushButton *menuBtn = new QPushButton("Test");
    connect(menuBtn, SIGNAL(clicked()), this, SLOT(changeMenuBar()));

    setCentralWidget(menuBtn);
}

void MainWindow::changeMenuBar() {
    m_menuBar->clear();

    // Disappears as soon as …
Run Code Online (Sandbox Code Playgroud)

c++ macos qt qmenu qmenubar

3
推荐指数
1
解决办法
5601
查看次数

标签 统计

macos ×2

c++ ×1

menubar ×1

pyqt ×1

pyqt5 ×1

python ×1

qmenu ×1

qmenubar ×1

qt ×1