作用
- 使用控件显示选择文件夹的所有图片
- 单击图片显示图片预览
效果
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f664ec62f4d74527bd93ee7b452b81b8.gif)
代码
import sys
import os
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QPushButton, QListView, QFileDialog, QWidget
from PyQt5.QtCore import QDir, QStringListModel, QModelIndex, Qt
class MyMainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.button = QPushButton('选择目录', self)
self.button.clicked.connect(self.selectDirectory)
self.listView = QListView(self)
self.model = QStringListModel()
self.listView.setModel(self.model)
self.listView.clicked.connect(self.on_listView_clicked)
layout = QVBoxLayout()
layout.addWidget(self.button)
layout.addWidget(self.listView)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
self.setWindowTitle('目录文件列表')
self.setGeometry(300, 300, 300, 200)
self.last_directory = ''
def selectDirectory(self):
directory = QFileDialog.getExistingDirectory(self, "选择目录")
if directory:
self.model.setStringList([])
dir_obj = QDir(directory)
file_filter = QDir.Files | QDir.Dirs | QDir.NoDotAndDotDot
file_list = dir_obj.entryList(['*.png', '*.jpg', '*.jpeg', '*.bmp', '*.gif'], file_filter)
self.model.setStringList(file_list)
self.last_directory = directory
def on_listView_clicked(self, index):
if not index.isValid():
return
file_name = self.model.stringList()[index.row()]
file_path = os.path.join(self.last_directory, file_name)
if os.path.isfile(file_path):
os.startfile(file_path)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyMainWindow()
ex.show()
sys.exit(app.exec_())