Python学习之简易图片浏览器

俗话说实践是学习最有效的方法。最近在学习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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天飓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值