#无特殊注明,所有案例只修改第一个案例的对应部分 主窗口: 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()