天天看点

PYQT5 三、QMainWindow

一、 QMainWindow menu
           

创建了一个File菜单栏, 其中包含一个菜单。此菜单将包含一个Exit操作, 如果选择该操作将终止应用程序。还将创建状态栏。可以使用 Ctrl Q 快捷方式访问该操作。

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


class Example(QMainWindow):

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

        self.initUI()

    def initUI(self):
        exitAct = QAction(QIcon('exit.png'), '&Exit', self)  #QAction 创建一个按钮、一个图标、一个Exit标签、
        exitAct.setShortcut('Ctrl+Q')  # 定义一个快捷键。
        exitAct.setStatusTip('Exit application') #第三行创建一个状态提示当我们将鼠标指针悬停在菜单项时,状态栏所示。
        exitAct.triggered.connect(qApp.quit)  # 按钮触发qApp结果

        self.statusBar().showMessage('Ready') # 创建一个状态栏,并在状态栏显示Ready

        menubar = self.menuBar()     #创建一菜单栏
        fileMenu = menubar.addMenu('&File')  菜单栏里创建一个File菜单
        fileMenu.addAction(exitAct)   #菜单里创建了一个按钮。

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Simple menu')
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
           

二、 创建子菜单项

在该示例中,有两个菜单项。

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

class Example(QMainWindow):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):         
        
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('File')
        
        impMenu = QMenu('Import', self)  #QMenu 创建一个菜单
        impAct = QAction('Import mail', self) # 创建按钮
        impMenu.addAction(impAct)    # 在Import子菜单里添加Import mail按钮
        
        newAct = QAction('New', self)        
        
        fileMenu.addAction(newAct)  #在File菜单下添加New 按钮
        fileMenu.addMenu(impMenu)    #在File菜单下添加子菜单Import
        
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Submenu')    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
           

三、 viewMenu

创建一个视图菜单。该按钮显示或隐藏状态栏, 当状态栏是可见的,该按钮被选中。

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

class Example(QMainWindow):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):         
        
        self.statusbar = self.statusBar()
        self.statusbar.showMessage('Ready')
        
        menubar = self.menuBar()
        viewMenu = menubar.addMenu('View')
        
        viewStatAct = QAction('View statusbar', self, checkable=True)  # 创建一个可选按钮View statusbar, checkable开启是否可选。
        viewStatAct.setStatusTip('View statusbar')   #在状态栏显示
        viewStatAct.setChecked(True)    #初始状态为已选中
        viewStatAct.triggered.connect(self.toggleMenu)
        
        viewMenu.addAction(viewStatAct)
        
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Check menu')    
        self.show()
        
    def toggleMenu(self, state):
        
        if state:
            self.statusbar.show()
        else:
            self.statusbar.hide()   #我们显示或隐藏状态栏。
       
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
           

四、弹出式菜单

请在框体上单击右键,会弹出菜单。

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

class Example(QMainWindow):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):         
        
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Context menu')    
        self.show()
    
    
    def contextMenuEvent(self, event):
       
           cmenu = QMenu(self)
           
           newAct = cmenu.addAction("New")
           opnAct = cmenu.addAction("Open")
           quitAct = cmenu.addAction("Quit")
           action = cmenu.exec_(self.mapToGlobal(event.pos()))  #获取系统鼠标指针位置,在鼠标指针处右键弹出窗体
           
           if action == quitAct:
               qApp.quit()
       
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())      

五、创建工具条

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

class Example(QMainWindow):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):               
        
        exitAct = QAction(QIcon('exit24.png'), 'Exit', self)
        exitAct.setShortcut('Ctrl+Q')
        exitAct.triggered.connect(qApp.quit)
        
        self.toolbar = self.addToolBar('Exit')
        self.toolbar.addAction(exitAct)
        
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Toolbar')    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())