
#无特殊注明,所有案例只修改第一个案例的对应部分 主窗口: QMainWindow提供了主窗口的功能,使用它能创建一些简单的状态栏、工具栏和菜单栏。
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
#  继承QMainWindow,状态栏是由QMainWindow创建的
class Example(QMainWindow):
    #  继承父类构造
    def __init__(self):
        super().__init__()
        #  使用initUI()方法创建一个GUI
        self.initUI()
    #  初始化组件
    def initUI(self):
        #  创建状态栏,showMessage()方法在状态栏上显示一条信息
        self.statusBar().showMessage('Ready')
        #  不注释了
        self.setGeometry(300, 300, 300, 250)
        self.setWindowTitle('Statusbar')
        self.show()
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    #  进入应用的主循环中,调用exit()方法或直接销毁主控件时,主循环就会结束
    sys.exit(app.exec_())
#  初始化组件
def initUI(self):
    #  QAction是菜单栏、工具栏或者快捷键的动作的组合
    #  添加图标,文字描述
    exitAct = QAction(QIcon('cat.jpg'), '&Exit', self)
    #  添加快捷键
    exitAct.setShortcut('Ctrl+Q')
    #  添加状态栏动作,鼠标悬停时显示状态
    exitAct.setStatusTip('Exit application')
    #  绑定关闭动作
    exitAct.triggered.connect(qApp.quit)
    #  创建状态栏
    self.statusBar()
    #  创建菜单栏
    menubar = self.menuBar()
    #  添加一个菜单
    fileMenu = menubar.addMenu('&File')
    #  为菜单添加动作
    fileMenu.addAction(exitAct)
    #  不注释了
    self.setGeometry(300, 300, 300, 250)
    self.setWindowTitle('Simple menu')
    self.show()
#  初始化组件
def initUI(self):
    #  创建菜单栏
    menubar = self.menuBar()
    #  添加一个菜单
    fileMenu = menubar.addMenu('File')
    #  创建一个动作
    newAct = QAction('New', self)
    
    #  使用QMenu创建一个新菜单
    impMenu = QMenu('Import', self)
    #  创建一个动作,添加到新菜单
    impAct = QAction('Import mail', self)
    impMenu.addAction(impAct)
    
    #  将动作和新菜单,添加到主菜单
    fileMenu.addAction(newAct)
    fileMenu.addMenu(impMenu)
    
    #  不注释了
    self.setGeometry(300, 300, 300, 250)
    self.setWindowTitle('Submenu')
    self.show()
#  初始化组件
def initUI(self):
    #  创建一个状态栏
    self.statusbar = self.statusBar()
    self.statusbar.showMessage('Ready')
    #  创建一个菜单栏,添加一个菜单
    menubar = self.menuBar()
    viewMenu = menubar.addMenu('View')
    #  创建一个动作,用checkable选项创建一个能选中的菜单
    viewStatAct = QAction('View statusbar', self, checkable=True)
    #  添加状态栏动作,鼠标悬停时显示状态
    viewStatAct.setStatusTip('View statusbar')
    #  设置默认为选中状态
    viewStatAct.setChecked(True)
    #  将动作与函数绑定
    viewStatAct.triggered.connect(self.toggleMenu)
    #  将动作添加到菜单
    viewMenu.addAction(viewStatAct)
    #  不注释了
    self.setGeometry(300, 300, 300, 250)
    self.setWindowTitle('Check menu')
    self.show()
#  初始化组件
def initUI(self):
    #  不注释了
    self.setGeometry(300, 300, 300, 250)
    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")
    #  使用exec_()方法显示菜单,从鼠标右键事件对象中获得当前坐标
    #  mapToGlobal()方法把当前组件的相对坐标转换为窗口(window)的绝对坐标
    action = cmenu.exec_(self.mapToGlobal(event.pos()))
    #  绑定关闭事件
    if action == quitAct:
        qApp.quit()
#  初始化组件
def initUI(self):
    #  创建一个动作
    exitAct = QAction(QIcon('cat.jpg'), '&Exit', self)
    #  设置快捷键
    exitAct.setShortcut('Ctrl+Q')
    #  将动作与关闭事件绑定
    exitAct.triggered.connect(qApp.quit)
    #  用addToolBar()创建工具栏
    self.toolbar = self.addToolBar('Exit')
    #  并用addAction()将动作对象添加到工具栏
    self.toolbar.addAction(exitAct)
    #  不注释了
    self.setGeometry(300, 300, 300, 250)
    self.setWindowTitle('Toolbar')
    self.show()