公众号: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