菜单栏、工具栏与状态栏
菜单栏
在QMainWindow对象的标题栏下方,水平的QMenuBar被保留显示QMenu对象。
QMenu类提供了一个可以添加到菜单栏的小空间,也用于创建上下文菜单和弹出菜单,每个QMenu对象都包含一个或多个QAction对象或级联的QMenu对象。
常用的方法
- menuBar 返回主窗口的QMenuBar对象
- addMenu 在菜单栏中添加一个新的QMenu对象
- addAction 向QMenu小控件中添加一个操作按钮,其中包括文件或图标
- setEnable 将操作按钮状态设置为启动或禁用
- addSeperator 在菜单栏中添加一条分隔线
- clear 删除菜单、菜单栏的内容
- setShortcut 将快捷键关联到操作按钮
- setText 设置菜单项的文本
- setTitle 设置QMenu小控件的标题
- text 返回与QAction对象关联的文本
- title 返回QMenu小控件的标题
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class MenuDemo(QMainWindow):
def __init__(self, parent=None):
super(MenuDemo, self).__init__(parent)
layout = QHBoxLayout()
bar = self.menuBar()
file = bar.addMenu("File")
file.addAction("New")
save = QAction("Save", self)
save.setShortcut("Ctrl+S")
file.addAction(save)
edit = file.addMenu("Edit")
edit.addAction("copy")
edit.addAction("poste")
quit =QAction("Quit", self)
file.addAction(quit)
# 菜单发射triggered信号
file.triggered[QAction].connect(self.processtrigger)
self.setLayout(layout)
self.setWindowTitle("menu 例子")
def processtrigger(self, q):
print(q.text() + " is triggered")
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = MenuDemo()
demo.show()
sys.exit(app.exec_())
QToolBar
QToolbar控件是由文本按钮、图标或其他控件组成的可移动的面板,位于菜单栏下方
常用的方法
方法 描述
- addAction 添加具有文本或图标的工具按钮
- addSeparator 分组显示工具按钮
- addWidget 添加工具栏中按钮以外的控件
- addToolBar 使用QMainWindow类的方法添加一个新的工具栏
- setMovable 工具栏变得可移动
- setOrientation 工具栏的方法可以设置为Qt.Horizontal或Qt.vertical
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class ToolBarDemo(QMainWindow):
def __init__(self, parent=None):
super(ToolBarDemo, self).__init__(parent)
self.setWindowTitle("toolbar 例子")
self.resize(300, 200)
layout = QVBoxLayout()
tb = self.addToolBar("File")
new = QAction(QIcon("./images/new.png"),'new',self)
tb.addAction(new)
open = QAction(QIcon("./images/open.png"),"open",self)
tb.addAction(open)
save = QAction(QIcon("./images/save.png"),"save",self)
tb.addAction(save)
tb.actionTriggered[QAction].connect(self.toolbtnpressed)
self.setLayout(layout)
def toolbtnpressed(self, a):
print("Pressed tool button is ", a.text())
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = ToolBarDemo()
demo.show()
sys.exit(app.exec_())
QStatusBar
MainWindow对象在底部保留有一个水平条,作为状态栏(QStatusBar),用于显示永久的或临时的状态信息。
常用的方法
方法 描述
- addWidget 在状态栏中添加给定的窗口的小控件对象
- addPermanentWidget 在状态栏中永久添加给定的窗口小控件对象
- showMessage 在状态栏中显示一条临时信息指定的时间间隔
- clearMessage 删除正在显示的临时信息
- removeWidget 从状态栏中删除指定的小控件
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class StatusDemo(QMainWindow):
def __init__(self, parent = None):
super(StatusDemo, self).__init__(parent)
bar = self.menuBar()
file = bar.addMenu("File")
file.addAction("show")
file.triggered[QAction].connect(self.processTrigger)
self.setCentralWidget(QTextEdit())
self.statusBar = QStatusBar()
self.setWindowTitle("QStatus 例子")
self.setStatusBar(self.statusBar)
def processTrigger(self, q):
if(q.text() == "show"):
self.statusBar.showMessage(q.text() + " 菜单选项被点击了",5000)
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = StatusDemo()
demo.show()
sys.exit(app.exec_())
单击show菜单选项的时候,就会在状态栏显示提示信息。然后在5s后消失。