跳转至

常用控件4

点击这里,边看视频讲解,边学习下面的内容

菜单栏/菜单

菜单栏/菜单 相关的 Python QT 官方文档 链接如下:

菜单栏

菜单

QAction


需要菜单栏的,通常是 QMainWindow 类型的窗口, 我们可以使用代码创建菜单栏内容,如下

from PySide6 import QtWidgets
from PySide6.QtGui import QIcon

class Window(QtWidgets.QMainWindow):

    def __init__(self):

        super().__init__()
        self.resize(600,200)

        # 创建 菜单栏QMenuBar 对象 并返回
        menuBar = self.menuBar()

        # 一级菜单
        fileMenu = menuBar.addMenu("文件")
        editMenu = menuBar.addMenu("编辑")
        helpMenu = menuBar.addMenu("帮助")
        # 一级Action
        actionHomePage = menuBar.addAction('主页')
        actionHomePage.triggered.connect(self.actionHomePageClicked)

        # 一级菜单的 action项
        actionAddNode = fileMenu.addAction(QIcon("./Images/folder.png"),"添加")
        fileMenu.addSeparator() # 分隔符
        actionDelNode = fileMenu.addAction("删除")
        actionAddNode.triggered.connect(self.actionAddNodeClicked)
        actionDelNode.triggered.connect(self.actionDelNodeClicked)

        # 二级菜单
        edit_1 = editMenu.addMenu("插入图表")
        edit_2 = editMenu.addMenu("插入图片")

        # 二级菜单的 action项
        action1 = edit_1.addAction("action1")
        action2 = edit_1.addAction("action2")

    def actionHomePageClicked(self):
        print('actionHomePageClicked')

    def actionAddNodeClicked(self):
        print('actionAddNodeClicked')

    def actionDelNodeClicked(self):
        print('actionDelNodeClicked')


app = QtWidgets.QApplication()
ex = Window()
ex.show()
app.exec()


大家可以运行一下上面的代码,看一下界面。


菜单层级结构是这样的:

菜单栏(QMenuBar) ->  菜单(QMenu) -> QAction

当然,菜单里面还可以有子菜单,就是这样

菜单栏(QMenuBar) ->  菜单(QMenu)->  子菜单(QMenu) -> QAction

注意:上面说的子菜单,并不是一种新的类型,也是 QMenu , 只是从属于其他Qmenu, 就像 QLayout 形成的层级关系一样。


菜单里面 点击能触发操作的条目,称之为 QAction ,中文叫 动作


也可以在 Qt Designer上很方便的为 QMainWindow 类型的窗口添加菜单,如下所示

image

点击 菜单Action, 会触发信号 triggered, 处理点击菜单的的代码如下

self.ui.actionOpenFile.triggered.connect(self.openPageFile)


您需要高效学习,找工作? 点击咨询 报名实战班

点击查看学员就业情况

工具栏

工具栏的 Python QT 官方文档 链接如下:

工具栏


工具里面的可以点击的条目 也是 QAction ,和菜单栏一样!

可以用代码创建工具栏的内容,如下

from PySide6 import QtWidgets
from PySide6.QtGui import QIcon

class Window(QtWidgets.QMainWindow):

    def __init__(self):

        super().__init__()
        self.resize(600,200)

        # 创建 工具栏 对象 并添加
        toolbar = QtWidgets.QToolBar(self)
        self.addToolBar(toolbar)

        # 添加 工具栏 条目Action
        actionAddNode = toolbar.addAction(QIcon("./Images/folder.png"),"添加")
        actionAddNode.triggered.connect(self.actionAddNodeClicked)

        action = toolbar.addAction("删除")
        action = toolbar.addAction("修改")
        action = toolbar.addAction("查询")
        toolbar.addSeparator()             # 添加分隔符
        action = toolbar.addAction("帮助")

    def actionAddNodeClicked(self):
        print('actionAddNodeClicked')


app = QtWidgets.QApplication([])
ex = Window()
ex.show()
app.exec()


如果 菜单栏 和 工具栏有 相同的 action ,可以公用一个Action对象。


也可以在 Qt Designer上很方便的为 QMainWindow 类型的窗口添加工具栏。

右键点击 Main Window 类型的窗体空白处,如下所示

image

选择添加工具栏


注意,只有 Main Window 类型的窗体,才能添加工具栏,如下

image


添加工具栏后,还要在工具栏上添加 条目Action (中文称之为: 动作 )。

方法是点击右下角 动作编辑器 ,新建动作,如下图所示

image

然后如下图所示进行设置

image

添加动作成功后,就可以直接拖到工具栏上了。


然后,在代码中定义动作触发后的处理函数,如下所示

self.ui.actionAddNote.triggered.connect(self.actionAddNode)


如果菜单和工具栏有 相同的 action ,通常是先在 动作编辑器 创建一个action, 然后分别拖动到 菜单 和 工具栏

状态栏

官网介绍

状态栏通常显示在窗口底部,对应的控件类型是: QStatusBar

需要底部状态栏的,通常是 QMainWindow 类型的窗口, 用 Qt Designer 设计的Qt Designer, 会自带状态栏,缺省属性名称为 statusbar


要在状态栏显示文本信息,只需要调用 状态栏 QStatusBar 的 showMessage 方法,如下

self.ui.statusbar.showMessage(f'打开文件{filePath}')

提示框

QMessageBox 类可以用来弹出各种提示框

官网介绍

该类可以通过一系列静态方法,显示 如下弹出框

  • 错误报告

image

使用 critical 方法

from PySide6.QtWidgets import QMessageBox

QMessageBox.critical(
    self.ui,
    '错误',
    '请选择爬取数据存储路径!')
  • 警告

image

使用 warning 方法

from PySide6.QtWidgets import QMessageBox

QMessageBox.warning(
    self.ui,
    '阅读太快',
    '阅读客户协议必须超过1分钟')
  • 信息提示

image

使用 information 方法

from PySide6.QtWidgets import QMessageBox

QMessageBox.information(
    self.ui,
    '操作成功',
    '请继续下一步操作')

也可以使用 about 方法

from PySide6.QtWidgets import QMessageBox

QMessageBox.about(
    self.ui,
    '操作成功',
    '请继续下一步操作')
  • 确认继续

image

使用 question 方法

from PySide6.QtWidgets import QMessageBox

choice = QMessageBox.question(
    self.ui,
    '确认',
    '确定要删除本文件吗?')

if choice == QMessageBox.Yes:
    print('你选择了yes')
if choice == QMessageBox.No:
    print('你选择了no')

输入对话框

QInputDialog 输入对话框 只让用户输入一行数据信息,比如 姓名、年龄等。

可以方便的用来获取简单的信息。

image

官网介绍


比如

from PySide6.QtWidgets import QInputDialog,QLineEdit

# 返回值分别是输入数据 和 是否点击了 OK 按钮(True/False)
title, okPressed = QInputDialog.getText(
    self, 
    "输入目录名称",
    "名称:",
    QLineEdit.Normal,
    "")

if not okPressed:
    print('你取消了输入')


常用的方法有:

  • getText

弹出对话框,让用户输入 单行文本

  • getMultiLineText

弹出对话框,让用户输入 多行文本

  • getInt

弹出对话框,让用户输入 整数

  • getItem

弹出对话框,让用户选择 选项

items = ["春天", "夏天", "秋天", "冬天"]

item, ok = QInputDialog().getItem(self, 
                                  "请选择",
                                  "季节:", 
                                  items, 
                                  0, 
                                  False)
if ok and not item.isEmpty():
    itemLabel.setText(item)

剪贴板

Qt程序可以获取和设置剪贴板内容

官网介绍

from PySide6.QtGui import QGuiApplication

cb = QGuiApplication.clipboard()
# 获取剪贴板内容
originalText = cb.text()
# 设置剪贴板内容
clipboard.setText(newText)

树控件

QTreeWidget 树控件 树控件, 是和 QTreeWidgetItem 树节点控件 结合使用的。

如下图所示

image

本节讲解 仅 内部学员 可见

MDI 多个子窗口

QMdiArea 提供了一个主窗口区,里面可以存放多个 QMdiSubWindow 子窗口

如图:

image

本节讲解 仅 内部学员 可见