Skip to content

Commit b729337

Browse files
committed
Add 03-12-03-06
QFileDialog-信号
1 parent 50216c5 commit b729337

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import sys
2+
from pprint import pprint
3+
4+
from PySide6 import QtWidgets
5+
6+
"""
7+
QFileDialog 信号
8+
9+
currentChanged(path: str) 当前选择改变时发射此信号,新选择的项作为参数传递
10+
currentUrlChanged(url: QUrl) 当前选中的Url改变时发射此信号,新的Url作为参数传递
11+
directoryEntered(directory: str) 进入目录时发射此信号,目录作为参数传递
12+
directoryUrlEntered(directory: QUrl) 进入目录时发射此信号,目录的URL作为参数传递
13+
fileSelected(file: str) 选择了文件,并以Accept退出对话框时,发射此信号
14+
filesSelected(selected: List[str]) 选择了(多个)文件时发射此信号
15+
filterSelected(filter_: str) 选中过滤器时发射此信号,过滤器作为参数传出
16+
urlSelected(url: QUrl) 选择了文件,并以Accept退出对话框时,发射此信号
17+
urlsSelected(urls: List[QUrl]) 选择了(多个)文件时发射此信号
18+
"""
19+
20+
21+
class MyWidget(QtWidgets.QWidget):
22+
def __init__(self, *args, **kwargs):
23+
super(MyWidget, self).__init__(*args, **kwargs)
24+
25+
self.dialog = QtWidgets.QFileDialog(self) # 文件对话框
26+
self.info_le = QtWidgets.QLineEdit(self) # 用于显示最终选择
27+
self.info_label = QtWidgets.QLabel(self) # 用于显示当前选择
28+
29+
self.setup_dialog()
30+
self.setup_ui()
31+
self.test_signals()
32+
33+
def test_signals(self) -> None:
34+
"""测试QFileDialog信号功能"""
35+
self.dialog.fileSelected.connect(lambda path: self.info_le.setText(path)) # type: ignore
36+
self.dialog.currentChanged.connect(lambda path: self.info_label.setText(path)) # type: ignore
37+
self.dialog.filesSelected.connect(lambda files: pprint(f"filesSelected: {files}")) # type: ignore
38+
self.dialog.directoryEntered.connect(lambda dir_: print(f"directoryEntered: {dir_}")) # type: ignore
39+
self.dialog.filterSelected.connect(lambda filter_: print(f"filterSelected: {filter_}")) # type: ignore
40+
41+
def setup_dialog(self) -> None:
42+
"""设置文件对话框"""
43+
44+
self.dialog.setAcceptMode(QtWidgets.QFileDialog.AcceptOpen)
45+
self.dialog.setFileMode(QtWidgets.QFileDialog.ExistingFiles)
46+
self.dialog.setNameFilters(
47+
("Python files (*.py)", "Markdown files (*.md)", "Any files (*)")
48+
)
49+
50+
def setup_ui(self) -> None:
51+
"""设置界面"""
52+
53+
self.setWindowTitle("QFileDialog-信号")
54+
55+
# 配置其他控件
56+
self.info_le.setMinimumWidth(600)
57+
browse_btn = QtWidgets.QPushButton("打开文件", self)
58+
browse_btn.clicked.connect(self.dialog.open) # type: ignore
59+
60+
# 使用布局管理器布局
61+
layout = QtWidgets.QVBoxLayout(self)
62+
layout.addWidget(browse_btn)
63+
layout.addWidget(self.info_le)
64+
layout.addWidget(self.info_label)
65+
self.setLayout(layout)
66+
67+
68+
if __name__ == "__main__":
69+
app = QtWidgets.QApplication(sys.argv)
70+
window = MyWidget()
71+
window.show()
72+
sys.exit(app.exec())

0 commit comments

Comments
 (0)