如何将菜单栏添加到QWidget



我有一个通常显示在Qmainwindow中的Qwidget。有时没有必要使用整个主窗口,因为您只想使用某个Qwidget中的函数。如果是这种情况,我希望在我的小部件中有一个菜单栏。

我试着:

if parent  == "self":
    self.layout().addMenubar(self)
但是使用上面的代码,它只是停止编译而不会引发任何错误。我做错了什么?谢谢!

好的,我能做到!

您只需在QWidget中添加QtGui.QMenuBar(self),并像QMainWindows一样实现。

Reference: Here


例子;

import sys
from PyQt4 import QtGui
class QTestWidget (QtGui.QWidget):
    def __init__ (self):
        super(QTestWidget, self).__init__()
        self.myQMenuBar = QtGui.QMenuBar(self)
        exitMenu = self.myQMenuBar.addMenu('File')
        exitAction = QtGui.QAction('Exit', self)        
        exitAction.triggered.connect(QtGui.qApp.quit)
        exitMenu.addAction(exitAction)
myQApplication = QtGui.QApplication(sys.argv)
myQTestWidget = QTestWidget()
myQTestWidget.show()
myQApplication.exec_()

认为,

还有一种非常干净的方法来组合QMainWindowQWidget,使用两个类:

import sys
from PyQt4 import QtCore, QtGui
class MainWindow(QtGui.QMainWindow): 
def __init__(self, parent=None): 
    super(MainWindow, self).__init__(parent)
    self.win_widget = WinWidget(self)
    widget = QtGui.QWidget()
    layout = QtGui.QVBoxLayout(widget)
    layout.addWidget(self.win_widget)
    self.setCentralWidget(widget)
    self.statusBar().showMessage('Ready')
    self.toolbar = self.addToolBar('Exit')
    exitAction = QtGui.QAction ('Exit', self)
    exitAction.setShortcut('Ctrl+Q')
    exitAction.triggered.connect(QtGui.qApp.quit)
    self.toolbar = self.addToolBar('Exit')
    self.toolbar.addAction(exitAction)
    menubar = self.menuBar() 
    fileMenu = menubar.addMenu('&File')
    self.setGeometry(300, 300, 450, 250)
    self.setWindowTitle('Test')  
    self.setWindowIcon (QtGui.QIcon('logo.png'))
    self.show()
class WinWidget (QtGui.QWidget) : 
def __init__(self, parent): 
    super (WinWidget , self).__init__(parent)
    self.controls()
    #self.__layout()
def controls(self):
    self.qbtn = QtGui.QPushButton('Quit', self)
    self.qbtn.setFixedSize (100,25)
    self.qbtn.setToolTip ("quit")
    self.qbtn.clicked.connect(QtCore.QCoreApplication.instance().quit)
    self.qbtn.move(50, 50)  
def main():
app = QtGui.QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()

这行得通:

def menu_bar (self) : 
    self.menuBar = QtGui.QMenuBar (self)
    fileMenu = self.menuBar.addMenu ("File")
    self.menuBar.show()

或已经有动作:

def menu_bar (self) : 
    self.menuBar = QtGui.QMenuBar (self)
    fileMenu = self.menuBar.addMenu ("File")
    exitAction = QtGui.QAction(QtGui.QIcon('exit24.png'), 'Exit', self)
    fileMenu.addAction(exitAction)
    exitAction.triggered.connect(self.close)
    exitAction.setShortcut('Ctrl+Q')
    self.menuBar.show()

继续使用QMainWindow将是一个好主意,因为QMenuBar被设计为在其中使用。

也就是说,当我也在考虑做同样的事情时,我发现这篇文章很有帮助:Qt QWidget添加菜单栏

看看这个解决方案是否能帮到你。它帮助了我

相关内容

  • 没有找到相关文章

最新更新