常用控件4
菜单栏/菜单
菜单栏/菜单 相关的 Python QT 官方文档 链接如下:
需要菜单栏的,通常是 QMainWindow 类型的窗口, 我们可以使用代码创建菜单栏内容,如下
from PySide2 import QtWidgets
from PySide2.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
类型的窗口添加菜单,如下所示
点击 菜单Action, 会触发信号 triggered
, 处理点击菜单的的代码如下
self.ui.actionOpenFile.triggered.connect(self.openPageFile)
您需要高效学习,找工作? 点击咨询 报名实战班
点击查看学员就业情况
工具栏
工具栏的 Python QT 官方文档 链接如下:
工具里面的可以点击的条目 也是 QAction
,和菜单栏一样!
可以用代码创建工具栏的内容,如下
from PySide2 import QtWidgets
from PySide2.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
类型的窗体空白处,如下所示
选择添加工具栏
注意,只有 Main Window
类型的窗体,才能添加工具栏,如下
添加工具栏后,还要在工具栏上添加 条目Action
(中文称之为: 动作
)。
方法是点击右下角 动作编辑器
,新建动作,如下图所示
然后如下图所示进行设置
添加动作成功后,就可以直接拖到工具栏上了。
然后,在代码中定义动作触发后的处理函数,如下所示
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
类可以用来弹出各种提示框
该类可以通过一系列静态方法,显示 如下弹出框
- 错误报告
使用 critical
方法
from PySide2.QtWidgets import QMessageBox
QMessageBox.critical(
self.ui,
'错误',
'请选择爬取数据存储路径!')
- 警告
使用 warning
方法
from PySide2.QtWidgets import QMessageBox
QMessageBox.warning(
self.ui,
'阅读太快',
'阅读客户协议必须超过1分钟')
- 信息提示
使用 information
方法
from PySide2.QtWidgets import QMessageBox
QMessageBox.information(
self.ui,
'操作成功',
'请继续下一步操作')
也可以使用 about
方法
from PySide2.QtWidgets import QMessageBox
QMessageBox.about(
self.ui,
'操作成功',
'请继续下一步操作')
- 确认继续
使用 question
方法
from PySide2.QtWidgets import QMessageBox
choice = QMessageBox.question(
self.ui,
'确认',
'确定要删除本文件吗?')
if choice == QMessageBox.Yes:
print('你选择了yes')
if choice == QMessageBox.No:
print('你选择了no')
输入对话框
QInputDialog
输入对话框 只让用户输入一行数据信息,比如 姓名、年龄等。
可以方便的用来获取简单的信息。
比如
from PySide2.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 PySide2.QtGui import QGuiApplication
cb = QGuiApplication.clipboard()
# 获取剪贴板内容
originalText = cb.text()
# 设置剪贴板内容
clipboard.setText(newText)
树控件
QTreeWidget 树控件
树控件, 是和 QTreeWidgetItem 树节点控件
结合使用的。
如下图所示
本节讲解 仅 内部学员 可见
MDI 多个子窗口
QMdiArea
提供了一个主窗口区,里面可以存放多个 QMdiSubWindow
子窗口
如图:
本节讲解 仅 内部学员 可见