
公众号:uncle39py
V1
2023/05/11阅读:12主题:默认主题
85.PyQt5对话框控件
一.输入控件对话窗口
是一个独立的,临时性给用户输入的窗口,比如文件选择对话框,并将输入结果返回给主窗口处理;
还有其他输入控件对话框:比如选择字体,颜色,自定义输入框等(暂不介绍)
二.对话窗口基类QDialog
QDialog继承至QWidget,可以显示
QDialog窗口是顶级窗口,并不附属其他窗口,用于给用户临时性的选择一个文件/字体/颜色等
1.QDialog分为模态与非模态,涉及3种展示方法
-
模态: 阻塞式的,必须等待用户处理完对话框,才能处理主窗口; -
非模态:不会阻塞,对话框窗口和主窗口都可操作互不影响,比如查找/替换对话框 -
模态分为窗口级别和应用程序级别(但是我们不用去细究其差别,直接使用窗口级别即可)
#3种展示方法
d = QDialog(self) #self代表父控件parent
d.show() #非模态,与主窗口互不关联,均可操作
d.open() #模态(窗口级别),阻塞父控件窗口
d.exec() #模态(应用程序级别),先显示对话框,对话框关闭后才会弹出主窗口
针对非模态对话框show()
,可以结合以下两个方法将其设置为模态对话框(鸡肋!)
d.setModal(True) # 窗口级别的模态对话框
d.setWindowModality(Qt.WindowModal) # 窗口级别的模态对话框
d.show()
2.三个关闭对话框的函数及三个信号(了解)
d.accept() #关闭对话框,返回1,并触发accepted信号
d.reject() #关闭对话框,返回0,并触发rejected信号
d.done(int) #关闭对话框,返回int数字,并触发finished信号
#三个函数常用于按钮点击事件中执行,用于关闭对话框并返回数值,给主窗口识别用户的选择
btn1.clicked.connect(lambda :d.accept())
btn2.clicked.connect(lambda :d.reject())
btn3.clicked.connect(lambda :d.done(333))
d.accepted.connect(lambda: print('点击了接受按钮,执行具体逻辑'))
d.rejected.connect(lambda: print('点击了拒绝按钮,执行具体逻辑'))
d.finished.connect(lambda val: print('点击了完成按钮,执行具体逻辑',val))
result = d.exec()
print(result)
三.文件选择对话框QFileDialog
以下两种方式掌握其一即可
1.使用静态方法实现(推荐)
#1.获取单个文件
result = QFileDialog.getOpenFileName(
self, #父控件
"选择一个py文件", #对话框标题
"./", #打开的目录,当前目录
"all(*.*);;images(*.png *.jpg);;python文件(*.py)", #用于过滤文件类型,比如只能选择图片文件等
"python文件(*.py)" #默认过滤的文件类型
)
print(result) #返回文件路径信息
#2.获取多个文件
result = QFileDialog.getOpenFileNames(参数与上面例子一致)
#3.获取保存的文件名(包含有路径信息),拿到路径+文件名信息后就可以把内容写进去
result = QFileDialog.getSaveFileName(参数与上面例子一致)
#4.获取存在的文件夹路径
result = QFileDialog.getExistingDirectory(self,"选择一个文件夹","./")
过滤的文件类型格式:名称1(*.jpg *.png);;名称2(*.py)
2.使用构造函数实现
#1.默认是选择一个文件(不是保存)
fd = QFileDialog(self,"选择一个文件","./","images(*.png *.jpg);;python文件(*.py)")
fd.fileSelected.connect(lambda file:print(file))
fd.open() #程序不会停在这边,需要通过fd.fileSelected信号触发,来得到文件名路径
#fd.fileSelected文件被选中时触发信号
#2.设置为保存一个文件(放在fd.open()前)
fd.setAcceptMode(QFileDialog.AcceptSave)
#3.设置默认的后缀名(文件类型没有指定时生效)
fd.setDefaultSuffix("txt")

3.涉及的信号
使用的场景较少,有用到在查

作者介绍

公众号:uncle39py
V1