Skip to content

Commit e21008f

Browse files
committed
Add 03-12-03-04
QFileDialog-过滤器; QDir-Filters-枚举值;
1 parent 0d29f50 commit e21008f

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import sys
2+
3+
from PySide6 import QtWidgets
4+
from PySide6.QtCore import QDir
5+
6+
"""
7+
QFileDialog 过滤器
8+
9+
================================ 目录过滤器 ===================================
10+
文件对话框支持QDir.Filters式过滤器,可以只显示满足过滤器要求的文件/目录
11+
12+
QDir.Filters枚举值详情参见本节附录
13+
14+
.setFilter(filters: QDir.Filters)
15+
.filter() -> QDir.Filters
16+
17+
================================ 名称过滤器 ===================================
18+
19+
.setNameFilters(filters: Sequence[str])
20+
.setNameFilter(filter: str)
21+
.nameFilters() -> Sequence[str]
22+
23+
============================== 媒体类型过滤器 =================================
24+
还支持按媒体类型(MIME类型)分类过滤
25+
这是setNameFilters()的便捷方法
26+
调用setMimeTypeFilters会覆盖任何先前设置的名称过滤器,并更改nameFilters()的返回值
27+
28+
关于什么是MIME,可以参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types
29+
30+
.setMimeTypeFilters(filters: Sequence[str])
31+
.mimeTypeFilters() -> Sequence[str]
32+
"""
33+
34+
35+
class MyWidget(QtWidgets.QWidget):
36+
def __init__(self, *args, **kwargs):
37+
super().__init__(*args, **kwargs)
38+
self.dialog = QtWidgets.QFileDialog(self)
39+
self.setup_dialog() # 在展示对话框前先完成设置
40+
self.setup_ui()
41+
42+
def setup_dialog(self) -> None:
43+
"""设置文件对话框"""
44+
45+
# QDir过滤器
46+
self.dialog.setFilter(QDir.NoDotAndDotDot) # 不显示.和..,主要在类Unix系统下有意义
47+
48+
# 名称过滤器(会被设置MIME覆盖掉,测试时需注释掉MIME过滤器部分)
49+
self.dialog.setNameFilters(
50+
("Python files (*.py *.pyi *.pyc *.pyw)", "Markdown files (*.md)", "Any files (*)")
51+
)
52+
53+
# MIME过滤器
54+
# self.dialog.setMimeTypeFilters(("text/markdown", "image/jpeg", "application/octet-stream"))
55+
56+
def setup_ui(self) -> None:
57+
"""设置界面"""
58+
59+
self.setWindowTitle("QFileDialog-过滤器")
60+
self.resize(800, 600)
61+
browse_btn = QtWidgets.QPushButton("选择单个文件", self)
62+
browse_btn.move(150, 200)
63+
browse_btn.clicked.connect(self.dialog.open) # type: ignore
64+
info_le = QtWidgets.QLineEdit(self)
65+
info_le.move(150, 250)
66+
info_le.setMinimumWidth(600)
67+
self.dialog.fileSelected.connect(lambda path: info_le.setText(path)) # type: ignore
68+
69+
70+
if __name__ == "__main__":
71+
app = QtWidgets.QApplication(sys.argv)
72+
window = MyWidget()
73+
window.show()
74+
sys.exit(app.exec())
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# QDir.Filters
2+
3+
<https://doc.qt.io/qt-6/qdir.html#Filter-enum>
4+
5+
| 常量 || 描述 |
6+
| -------------- | ----------------------- | ------------------------------------------------------------ |
7+
| Dirs | 0x001 | 列出与过滤器匹配的目录 |
8+
| AllDirs | 0x400 | 列出所有目录,即不对目录名使用过滤器 |
9+
| Files | 0x002 | 列出文件 |
10+
| Drives | 0x004 | 列出磁盘驱动器(在Unix下忽略) |
11+
| NoSymLinks | 0x008 | 不要列出符号链接(在不支持符号链接的操作系统上忽略) |
12+
| NoDotAndDotDot | NoDot \| NoDotDot | 不要列出特殊条目"."和".." |
13+
| NoDot | 0x2000 | 不要列出特殊条目"." |
14+
| NoDotDot | 0x4000 | 不要列出特殊条目".." |
15+
| AllEntries | Dirs \| Files \| Drives | 列出目录、文件、驱动器和符号链接(除非指定System,否则不会列出损坏的符号链接) |
16+
| Readable | 0x010 | 列出应用程序对其具有读取权限的文件。需要与Dirs或Files结合使用 |
17+
| Writable | 0x020 | 列出应用程序对其具有写入权限的文件。需要与Dirs或Files结合使用 |
18+
| Executable | 0x040 | 列出应用程序对其具有执行权限的文件。需要与Dirs或Files结合使用 |
19+
| Modified | 0x080 | 仅列出已修改的文件(在Unix上忽略) |
20+
| Hidden | 0x100 | 列出隐藏文件(在Unix平台上那些以"."开头的文件) |
21+
| System | 0x200 | 列出系统文件(在Unix上包括FIFO、套接字和设备文件;在Windows上包括.lnk文件) |
22+
| CaseSensitive | 0x800 | 过滤器区分大小写 |

0 commit comments

Comments
 (0)