俗话说实践是学习最有效的方法。最近在学习python,于是就参考着各类文章,也倒腾了一个简易图片浏览器,效果图如下:

整个浏览器分为左右两侧,左侧是地址栏+图片文件列表;右侧则是图片显示区域。
左侧地址栏有四个控件构成,分别是QLineEdit,QPushButton,QListWidget和隐藏的QTreeView。初始化会在QLineEdit显示当前地址,点击右侧按钮,则会展示隐藏的目录树(如下图):

选中目录后,QlineEdit则会自动更新选中目录的路径地址,而其下方的QlistWidget则显示带预览icon的图片文件。如下是实现上述功能的代码:
def showtree(self):
    # 显示/隐藏treeView
    if self.treeView.isVisible():
        self.treeView.setVisible(False)
    else:
        self.treeView.setVisible(True)
def treeview_init(self):
    # 初始化树形目录
    # 获取系统所有文件
    # 进行筛选只显示文件夹,不显示文件和特色文件
    if os.path.exists(self.lineEdit.text()):
        path = self.lineEdit.text()
    else:
        path = os.path.abspath(os.path.dirname(__file__))
    model01.setFilter(QtCore.QDir.Dirs | QtCore.QDir.NoDotAndDotDot)
    model01.setRootPath(path)
    # 定义创建文件树
    self.treeView.setModel(model01)
    for col in range(1, 4):
        self.treeView.setColumnHidden(col, True)
    self.treeView.doubleClicked.connect(self.fold_choose)
def fold_choose(self, Qmodelidx):
    # 选中文件夹
    path = model01.filePath(Qmodelidx)
    self.lineEdit.setText(path)
    self.treeView.setVisible(False)
    self.listWidget_init()
def listWidget_init(self):
    # 在listWidget显示缩略图
    PathData = []
    filePath = self.lineEdit.text()
    self.listWidget.clear()
    if os.path.exists(filePath) :
        path = filePath
        PathDataSet = os.listdir(path)
    else:
        return
    # 遍历判断拿到的文件是文件夹还是文件,Flase为文件,True为文件夹
    for Data in range(len(PathDataSet)):
        if self.file_extension(PathDataSet[Data]) == '.png' or self.file_extension(PathDataSet[Data]) == '.bmp' or self.file_extension(PathDataSet[Data]) == '.jpg':
            PathData.append(PathDataSet[Data])
            # print(PathDataSet[Data])
    total = len(PathData)
    for i in range(total):
        url = filePath + "/" + PathData[i]
        # print(url)
        item = QListWidgetItem()  # 创建QListWidgetItem对象
        item.setText(PathData[i])
        item.setIcon(QIcon(url))
        self.listWidget.addItem(item)
# 获取文件后缀名
def file_extension(self, filePath):
    return os.path.splitext(filePath)[1]
# 打开图片文件
def listWidget_dbclk(self):
    imgId = self.listWidget.currentIndex().row()
    file = self.lineEdit.text() + "/" + self.listWidget.item(imgId).text()
    self.LoadImage(file)在图片文件列表选中某个图片文件后,双击打开,就会在右侧显示。右侧区域是一个QScrollArea,图片则是由动态生成的QLabel加载。代码如下:
# 显示图片
def LoadImage(self, filePath):
    img = QPixmap(filePath)
    width = img.width()
    height = img.height()
    
    # 在scrollarea中动态生成加载图片的QLabel
    self.qwidget = QWidget()
    self.qwidget.setFixedSize(width, height)
    self.label = QLabel(self.qwidget)
    self.label.setFixedSize(width, height)
    self.label.setPixmap(img)
    self.scrollArea.setWidget(self.qwidget)完整代码可以从CSDN的资源下载。
https://download.csdn.net/download/hydekong/87721854











![[Platforimio] LVGL +TFT_eSPI实现触摸功能](https://img-blog.csdnimg.cn/818c9d07e01d43e3a2150e2f3de37df2.png)






![[MLIR] CodeGen Pipeline总结](https://img-blog.csdnimg.cn/img_convert/92185c37e19c27a9f89f70af3c32a0b2.png)
