gpt4 book ai didi

python - 在主窗口中添加多个来自其他类的 Qmenu

转载 作者:行者123 更新时间:2023-12-01 07:21:28 26 4
gpt4 key购买 nike

我希望主窗口中有一个菜单栏,并且能够从其他类设置菜单栏中的菜单。使用 setMenuWidget 命令将覆盖第一个菜单选项,如代码所示。在我设置菜单的类中,我想我可能需要只设置一个菜单而不是菜单栏,然后​​在主窗口中设置菜单栏。

这就是我想要的,这可以通过在类中填充单个菜单栏来实现,尽管我试图避免这种方法。

enter image description here

只显示第二个菜单

enter image description here

import sys
from PyQt5.QtWidgets import QAction, QApplication, QMainWindow
from PyQt5 import QtCore, QtGui, QtWidgets

class ToolBar0(QMainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self)

bar = self.menuBar() # don't think I need a menubar here
file_menu = bar.addMenu('menu1')
one = QAction('one', self)
two = QAction('two', self)
file_menu.addAction(one)
file_menu.addAction(two)


class ToolBar1(QMainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self)

bar = self.menuBar() # don't think I need a menubar here
file_menu = bar.addMenu('menu2')
one = QAction('one', self)
two = QAction('two', self)
file_menu.addAction(one)
file_menu.addAction(two)


class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self, parent=None)

#should a menubar be set up here?

#For seting widgets in main window
self.Tool_Bar0 = ToolBar0(self)
self.setMenuWidget(self.Tool_Bar0)

###menu_bar0 is over written
self.Tool_Bar1 = ToolBar1(self)
#self.setMenuWidget(self.Tool_Bar1)


if __name__ == '__main__':
app = QApplication(sys.argv)
# creating main window
mw = MainWindow()
mw.show()
sys.exit(app.exec_())

最佳答案

您可以使用带有方法的基类来返回包含 QAction 项的 QMenu 项列表或 QAction 项列表然后以您想要的方式将它们呈现在您的 QMainWindow 工具栏中,下面是一个示例:

import sys
from PyQt5.QtWidgets import QAction, QApplication, QMainWindow, QMenu


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

def menu_items(self)->list:
pass


class Window1(WindowWithToolbar, QMainWindow):
def __init__(self):
WindowWithToolbar.__init__(self)
QMainWindow.__init__(self)

# New menu with actions
self.menu = QMenu('one')
self.menu.addActions([QAction('two', self), QAction('three', self)])

def menu_items(self):
return [self.menu]


class Window2(WindowWithToolbar, QMainWindow):
def __init__(self):
WindowWithToolbar.__init__(self)
QMainWindow.__init__(self)

def menu_items(self):
# Only actions
return [QAction('three', self), QAction('four', self)]


class MainWindow(WindowWithToolbar, QMainWindow):
def __init__(self):
QMainWindow.__init__(self, parent=None)

self.window1 = Window1()
self.window2 = Window2()

self.menu = QMenu('File')
self.helloAction = QAction('Hello')
self.menu.addAction(self.helloAction)

self._build_menu()

def menu_items(self)->list:
return [self.menu]

def _build_menu(self):
self._add_menu_items(self)
self._add_menu_items(self.window1)
self._add_menu_items(self.window2)

def _add_menu_items(self, windowWithToolbar: WindowWithToolbar):
for menu_item in windowWithToolbar.menu_items():
if isinstance(menu_item, QMenu):
self.menuBar().addMenu(menu_item)
elif isinstance(menu_item, QAction):
self.menuBar().addAction(menu_item)


if __name__ == '__main__':
app = QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec_())

关于python - 在主窗口中添加多个来自其他类的 Qmenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57673194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com