PyQt5—基本窗口控件之菜单栏、工具栏和状态栏
菜单栏、工具栏和状态栏基本窗口控件十四、菜单栏、工具栏和状态栏1、菜单栏基本窗口控件十四、菜单栏、工具栏和状态栏1、菜单栏菜单栏,位于 QMainWindow 对象的标题栏下方。QMenu 类提供了一个可以添加到菜单栏的小控件,每个 QMenu 对象都可以包含一个或多个 QAction 对象或级联的 QMenu 对象。QMenu 也可以用来创建上下文菜单和弹出菜单。createPop...
·
菜单栏、工具栏和状态栏
基本窗口控件
十四、菜单栏、工具栏和状态栏
1、菜单栏
- 菜单栏,位于 QMainWindow 对象的标题栏下方。
- QMenu 类提供了一个可以添加到菜单栏的小控件,每个 QMenu 对象都可以包含一个或多个 QAction 对象或级联的 QMenu 对象。QMenu 也可以用来创建上下文菜单和弹出菜单。
- createPopupMenu() 用于创建弹出菜单;menuBar() 返回主窗口的 QMenuBar 对象;addMenu() 用于添加菜单项;addAction() 用于在菜单中添加操作。
- 设计菜单时的重要方法如下:
方法 描述 menuBar() 返回主窗口的 QMenuBar 对象 addMenu() 在菜单栏中添加一个新的 QMenu 对象 addAction() 向 QMenu 小控件添加一个操作按钮,其中包含文本或图标 setEnable() 将操作按钮状态设置为启用/禁用 addSeperator() 在菜单中添加一条分隔线 clear() 删除菜单/菜单栏中的内容 setShortcut() 将快捷键关联到操作按钮 setText() 设置菜单项的文本 setTitle() 设置 QMenu 小控件的标题 text() 返回与 QAction 对象关联的文本 title() 返回 QMenu 小控件的标题 - QMenuBar 使用示例:
# -*- coding:utf-8 -*- # Time : 2019/08/18 下午 4:42 # Author : 御承扬 # e-mail:2923616405@qq.com # project: PyQt5 # File : qt34_MenuTest.py # @software: PyCharm 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) self.setWindowTitle("Menu 示例") self.setWindowIcon(QIcon("./images/Python2.ico")) 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("paste") quit = QAction("Quit", self) file.addAction(quit) file.triggered[QAction].connect(self.processTrigger) self.setLayout(layout) @staticmethod def processTrigger(q): print(q.text() + " is triggered") if __name__ == "__main__": app = QApplication(sys.argv) win = MenuDemo() win.show() sys.exit(app.exec_())
- 运行如下:
- 控制台输出:
Quit is triggered New is triggered Save is triggered copy is triggered paste is triggered
2、工具栏
- QToolBar 工具栏,由文本按钮、图标或其他小控件按钮组成的可移动面板,通常位于菜单栏下方。
- QToolBar 类中的常用方法如下表:
方法 描述 addAction() 添加具有文本或图标的工具按钮 addSeperator() 分组显示工具按钮 addWidget() 添加工具栏中按钮以外的控件 addToolBar() 使用 QMainWindow 类的方法添加一个新的工具栏 setMovable() 工具栏变得可移动 setOrientation() 工具栏方向可以设置为 Qt.Horizontal 或 Qt.vertical - QToolBar 使用例子:
# -*- coding:utf-8 -*- # Time : 2019/08/18 下午 8:23 # Author : 御承扬 # e-mail:2923616405@qq.com # project: PyQt5 # File : qt35_ToolBar.py # @software: PyCharm 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("工具栏示例") self.setWindowIcon(QIcon("./images/Python2.ico")) 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) @staticmethod def toolBtnPressed(a): print("pressed tool button is ", a.text()) if __name__ == "__main__": app = QApplication(sys.argv) demo = ToolBarDemo() demo.show() sys.exit(app.exec_())
- 效果如下:
3、状态栏
- 状态栏,通常在 MainWindow 的底部的一个水平条;PyQt5 中使用 QStatusBar 类来创建状态栏,用于显示永久或临时的状态信息。
- QStatusBar 类的常用方法如下:
方法 描述 addWidget() 在状态栏中添加给定的窗口小控件对象 addPermanentWidget() 在状态栏中永久添加给定的窗口小控件对象 showMessage() 在状态栏中显示一条临时信息指定时间间隔 clearMessage() 删除正在显示的临时信息 removeWidget() 从状态栏中删除指定的小控件 - QStatusBar 示例:
# -*- coding:utf-8 -*- # Time : 2019/08/18 下午 9:05 # Author : 御承扬 # e-mail:2923616405@qq.com # project: PyQt5 # File : qt36_StatusBar.py # @software: PyCharm 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) self.setWindowTitle("状态栏示例") self.setWindowIcon(QIcon("./images/Python2.ico")) menuBar = self.menuBar() file = menuBar.addMenu("File") file.addAction("show") file.triggered[QAction].connect(self.processTrigger) self.setCentralWidget(QTextEdit()) self.statusBar = QStatusBar() 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_())
- 效果如下:
十五、QPrinter
- QPrinter 类用于处理打印操作。
- QPrinter 使用示例
# -*- coding:utf-8 -*- # Time : 2019/08/19 下午 9:04 # Author : 御承扬 # e-mail:2923616405@qq.com # project: PyQt5 # File : qt37_printer.py # @software: PyCharm import sys from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtPrintSupport import QPrinter, QPrintDialog class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.PrintAction = QAction(QIcon("./images/printer.png"), self.tr("打印"), self) self.setWindowTitle(self.tr("打印图片")) self.setWindowIcon(QIcon("./images/Python2.ico")) self.imageLabel = QLabel() self.imageLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) self.setCentralWidget(self.imageLabel) self.image = QImage() self.createActions() self.createMenus() self.createToolBars() if self.image.load("./images/back.jpg"): self.imageLabel.setPixmap(QPixmap.fromImage(self.image)) self.resize(self.image.width(), self.image.height()) def createActions(self): self.PrintAction.setShortcut("Ctrl+P") self.PrintAction.setStatusTip(self.tr("打印")) self.PrintAction.triggered.connect(self.slotPrint) def createMenus(self): PrintMenu = self.menuBar().addMenu(self.tr("打印")) PrintMenu.addAction(self.PrintAction) def createToolBars(self): fileToolBar = self.addToolBar("Print") fileToolBar.addAction(self.PrintAction) def slotPrint(self): printer = QPrinter() printDialog = QPrintDialog() if printDialog.exec_(): painter = QPainter(printer) rect = painter.viewport() size = self.image.size() size.scale(rect.size(), Qt.KeepAspectRatio) painter.setViewport(rect.x(), rect.y(), size.width(), size.height()) painter.setWindow(self.image.rect()) painter.drawImage(0, 0, self.image) if __name__ == "__main__": app = QApplication(sys.argv) main = MainWindow() main.show() sys.exit(app.exec_())
- 运行效果如下:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献9条内容
所有评论(0)