首页 > 技术文章 > [Python自学] PyQT5-菜单栏、工具栏、状态栏

leokale-zz 2020-06-15 15:39 原文

一、菜单栏

手工使用代码创建菜单栏主要有以下步骤:

1)创建一个获取窗口的menuBar实例(这个实例是MainWindow的成员属性)

2)在menuBar中添加Menu

3)在Menu中添加Actions

4)为Actions绑定triggered事件

菜单栏Demo:

import sys

# 导入QT,其中包含一些常量,例如颜色等
from PyQt5.QtCore import Qt
# 导入常用组件
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtWidgets import QAction
# 使用调色板等
from PyQt5.QtGui import QIcon


class DemoWin(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.resize(400, 250)
        # 获取QMainWindow的MenuBar对象
        bar = self.menuBar()
        # 在menuBar上添加文件菜单
        file = bar.addMenu("文件")
        new = QAction("新建 (&N)", self)
        open = QAction("打开 (&O)", self)
        save = QAction("保存", self)
        # 为一个Action设置快捷键
        save.setShortcut("Ctrl + S")
        saveAt = QAction("另存为", self)
        file.addAction(new)
        file.addAction(open)
        file.addAction(save)
        file.addAction(saveAt)
        # 为文件-->保存绑定槽函数
        save.triggered.connect(self.saveProcess)

        # 在menuBar上添加编辑菜单
        edit = bar.addMenu("编辑")
        edit.addAction("复制")
        edit.addAction("剪切")
        edit.addAction("粘贴")
        # 在编辑菜单中添加一个其他操作菜单,其中包含多个QAction
        others = edit.addMenu("其他操作")
        others.addAction("A操作")
        others.addAction("B操作")
        others.addAction("B操作")

        quit = QAction("退出", self)
        # 文件-->退出,绑定窗口的close槽
        quit.triggered.connect(self.close)
        file.addAction(quit)

        # 添加窗口标题
        self.setWindowTitle("MenuDemo")

    def saveProcess(self):
        print("保存")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon("images/icon.ico"))
    # 创建一个主窗口
    mainWin = DemoWin()
    # 显示
    mainWin.show()
    # 主循环
    sys.exit(app.exec_())

实现效果:

二、工具栏

要使用工具栏,需要以下步骤:

1)在QMainWindow中添加一个工具栏 addToolBar()

2)在toolBar中添加Action(Action可以指定图标和名称,默认只显示图标,名称以tip的方式显示)

import sys

# 导入QT,其中包含一些常量,例如颜色等
from PyQt5.QtCore import Qt
# 导入常用组件
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtWidgets import QAction, QMenu, QActionGroup
# 使用调色板等
from PyQt5.QtGui import QIcon


class DemoWin(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.resize(400, 250)

        # 创建一个toolBar,用于放置文件操作
        fileBar = self.addToolBar("File")
        new = QAction(QIcon('./images/new.jpg'), "新建", self)  # 指定了图标默认显示图标
        fileBar.addAction(new)
        open = QAction(QIcon('./images/open.jpg'), "打开", self)
        fileBar.addAction(open)
        fileBar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)  # 设置名称显示在图标下面(默认本来是只显示图标)

        fileBar.actionTriggered.connect(self.toolbtnpressed)

        # 创建另一个toolbar,用于放置编辑操作
        editBar = self.addToolBar("Edit")
        copy = QAction("复制", self)  # 没有指定图标,默认显示名称
        editBar.addAction(copy)
        paste = QAction("粘贴", self)
        editBar.addAction(paste)# 添加窗口标题
        self.setWindowTitle("ToolBarDemo")

    def toolbtnpressed(self, a):
        print("按下的ToolBar按钮是", a.text())  # 打印点击的按钮名称


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon("images/icon.ico"))
    # 创建一个主窗口
    mainWin = DemoWin()
    # 显示
    mainWin.show()
    # 主循环
    sys.exit(app.exec_())

实现效果:

 

三、状态栏

状态栏存在于窗口的最下方,用于显示信息。

Demo:

import sys

# 导入QT,其中包含一些常量,例如颜色等
from PyQt5.QtCore import Qt
# 导入常用组件
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtWidgets import QAction, QStatusBar
# 使用调色板等
from PyQt5.QtGui import QIcon


class DemoWin(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.resize(400, 250)
        fileBar = self.addToolBar("File")
        new = QAction(QIcon('./images/new.jpg'), "新建", self)
        fileBar.addAction(new)
        open = QAction(QIcon('./images/open.jpg'), "打开", self)
        fileBar.addAction(open)
        fileBar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
        fileBar.actionTriggered.connect(self.toolbtnpressed)
        editBar = self.addToolBar("Edit")
        copy = QAction("复制", self)
        editBar.addAction(copy)
        paste = QAction("粘贴", self)
        editBar.addAction(paste)

        # 定义一个状态栏,并添加到窗口上
        self.statusBar = QStatusBar()
        self.setStatusBar(self.statusBar)

        # 添加窗口标题
        self.setWindowTitle("StatusBarDemo")

    def toolbtnpressed(self, a):
        self.statusBar.showMessage(a.text() + "按钮被点击了.", 2000)  # 2000表示显示2s消失


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon("images/icon.ico"))
    # 创建一个主窗口
    mainWin = DemoWin()
    # 显示
    mainWin.show()
    # 主循环
    sys.exit(app.exec_())

实现效果:

 

 

====

推荐阅读