Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python MacOs上的PyQt5。添加到QMainWindow的自定义QMenuBar不可单击_Python_Pyqt_Pyqt5_Qmainwindow_Qmenubar - Fatal编程技术网

Python MacOs上的PyQt5。添加到QMainWindow的自定义QMenuBar不可单击

Python MacOs上的PyQt5。添加到QMainWindow的自定义QMenuBar不可单击,python,pyqt,pyqt5,qmainwindow,qmenubar,Python,Pyqt,Pyqt5,Qmainwindow,Qmenubar,我想用PyQt5.15为MacOs 10.15.6上的窗口制作一个菜单栏 我将QMenuBar类用于自定义菜单栏,在“文件”菜单下创建了一些子菜单,并将其添加到QMainWindow中 我可以看到全局菜单栏和其他MacOs一样创建在显示屏的顶部 我两个都试过了 class MenuBarWidget(QMenuBar): sig_new_file = pyqtSignal() sig_open_file = pyqtSignal() sig_save_file = pyq

我想用PyQt5.15为MacOs 10.15.6上的窗口制作一个菜单栏

我将QMenuBar类用于自定义菜单栏,在“文件”菜单下创建了一些子菜单,并将其添加到QMainWindow中 我可以看到全局菜单栏和其他MacOs一样创建在显示屏的顶部

我两个都试过了

class MenuBarWidget(QMenuBar):
    sig_new_file = pyqtSignal()
    sig_open_file = pyqtSignal()
    sig_save_file = pyqtSignal()
    sig_page_setup = pyqtSignal()
    sig_print = pyqtSignal()
    sig_exit = pyqtSignal()
    sig_status_bar = pyqtSignal(bool)

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

    # self.init_menu_edit()
    # self.init_menu_format()
    # self.init_menu_view()
    # self.init_menu_help()
    # self.set_all_text()

def init_menu_file(self):
    self.act_new_file = QAction('File', self)
    self.act_new_file.setShortcut(QKeySequence('Ctrl+N'))
    self.act_new_file.triggered.connect(lambda: self.sig_new_file.emit())

    self.act_open_file = QAction('Open', self)
    self.act_open_file.setShortcut(QKeySequence('Ctrl+O'))
    self.act_new_file.triggered.connect(lambda: self.sig_open_file.emit())

    self.act_save_file = QAction('Save', self)
    self.act_save_file.setShortcut(QKeySequence('Ctrl+S'))
    self.act_save_file.triggered.connect(lambda: self.sig_save_file.emit())

    self.act_print = QAction('Print', self)
    self.act_print.setShortcut(QKeySequence('Ctrl+P'))
    self.act_print.triggered.connect(lambda: self.sig_print.emit())

    self.act_quit = QAction('Quit', self)
    self.act_quit.setShortcut(QKeySequence('Ctrl+Q'))
    self.act_quit.triggered.connect(lambda: self.sig_exit.emit())

    self.menu_file = self.addMenu('&File')
    self.menu_file.addAction(self.act_new_file)
    self.menu_file.addAction(self.act_open_file)
    self.menu_file.addAction(self.act_save_file)
    self.menu_file.addSeparator()
    self.menu_file.addAction(self.act_print)
    self.menu_file.addSeparator()
    self.menu_file.addAction(self.act_quit)


if __name__ == '__main__':

class Form(QMainWindow):

    sig_new_file = pyqtSignal()

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

    def initUI(self):
        self.resize(640, 480)
        self.setWindowTitle('MenuBar')
        self.menu = MenuBarWidget()
        self.setMenuBar(self.menu)

app = QApplication(sys.argv)
form = Form()
form.show()
exit(app.exec_())
但是,创建的全局菜单栏不可单击。我点击了它,但它没有显示“文件”菜单下的子菜单

但是这种使用下面的“setNativeMenuBar(False)”的方式和Windows应用程序一样工作正常,但我想使用原生MacOs menubar

sub_menu = QAction('Someting else..',self)

fileMenu = QMainWindow.menuBar().addMenu('File')
fileMenu.addAction(sub_menu)
这里是图片

这可能会有所帮助 从PyQt5.qtwidts导入QMenuBar

Mainmenu=self.menuBar();#创建菜单栏小部件

Filemenu=Mainmenu.addMenu('file')#这会将文件添加到菜单栏


Editmenu=Mainmenu.addMenu('Edit')#这会将编辑添加到菜单栏

什么版本的Qt和OS X?我不会在PyQt5 5.9.2、macOS 10上复制该问题。10@alec对不起,没提。anaconda virtualenv上的PyQt5 5.15.0,macOS 10.15.6。我不知道这个错误是由于我对QMenuBar和QMainWndows的错误理解造成的,或者这只是版本不兼容。。
sub_menu = QAction('Someting else..',self)

fileMenu = QMainWindow.menuBar().addMenu('File')
fileMenu.addAction(sub_menu)
QMainWindow.menuBar() and QMainWindow.setNativeMenuBar(False)