如何快速制作一个图片文件预览小功能?

118 阅读1分钟

主题:本文实现一个图片和文本文件选择器的案例,效果如下:

图像文件选择.gif 文件选择查看功能很简单,只需要设计好图片文件和文本文件的选择函数就可以了。

1 图片文件选择

 #图片文件选择槽函数,支持png ico jpg格式文件
      def imgFile(self):
            fname, _tmp = QFileDialog.getOpenFileNames(self,'Open file','./images',"*.png *.ico *.jpg")
            # self.lb.setPixmap(QPixmap(fname))
            try:
                pixmap = QPixmap(fname[0])
                if not pixmap.isNull():
                    self.lb.setPixmap(pixmap)
                else:
                    print(f"无法加载图片: {fname}")
            except Exception as e:
                print(f"发生异常: {e}")

在面板中配置信号触发按钮:

            self.btn1 = QPushButton("选择图片文件")
           self.btn1.clicked.connect(self.imgFile)

2 文本文件选择

   #文本文件选择槽函数,定义DFileDialog弹窗
   def textFile(self):
          dlg = QFileDialog()
          dlg.setFileMode(QFileDialog.FileMode.AnyFile)
          dlg.setFilter(QDir.Filter.Files)

          if dlg.exec():
              fnames=dlg.selectedFiles()
              f = open(fnames[0],'r',encoding='utf-8')
              with f:
                  txt = f.read()
                  self.te.setText(txt)
  

面板中进行配置信号触发位置:

            self.btn2 = QPushButton("选择文本文件")
            self.btn2.clicked.connect(self.textFile)

3 定义布局盒子

    #垂直布局盒子
    layout = QVBoxLayout()

把按钮和文本框都添加到布局盒子里,添加方式如下:

    layout.addWidget(self.btn1)

4 完整代码

    # -*- coding:utf-8 -*-
    """
    ------------------------------------------------
    File Name: 文件选择.py
    Description:qq群 971671827
    Author: lzq
    date:2024-07-25 10:10
    ------------------------------------------------
    """
    import sys

    from PyQt6.QtCore import QDir
    from PyQt6.QtGui import *
    from PyQt6.QtWidgets import QWidget, QVBoxLayout, QPushButton, QLabel, QTextEdit, QFileDialog, QApplication


    class MyFileWidget(QWidget):
        def __init__(self,parent=None):
            super(MyFileWidget,self).__init__(parent)
            self.setUI()
        def setUI(self):
            self.setWindowTitle("文件选择案例")
            self.setWindowIcon(QIcon('./web.ico'))
            layout = QVBoxLayout()
            self.btn1 = QPushButton("选择图片文件")
            self.btn1.clicked.connect(self.imgFile)
            layout.addWidget(self.btn1)
            self.lb = QLabel("")
            layout.addWidget(self.lb)
            self.btn2 = QPushButton("选择文本文件")
            self.btn2.clicked.connect(self.textFile)
            layout.addWidget(self.btn2)
            self.te = QTextEdit()
            layout.addWidget(self.te)
            self.setLayout(layout)
        def imgFile(self):
            fname, _tmp = QFileDialog.getOpenFileNames(self,'Open file','./images',"*.png *.ico *.jpg")
            # self.lb.setPixmap(QPixmap(fname))
            try:
                pixmap = QPixmap(fname[0])
                if not pixmap.isNull():
                    self.lb.setPixmap(pixmap)
                else:
                    print(f"无法加载图片: {fname}")
            except Exception as e:
                print(f"发生异常: {e}")
        def textFile(self):
            dlg = QFileDialog()
            dlg.setFileMode(QFileDialog.FileMode.AnyFile)
            dlg.setFilter(QDir.Filter.Files)

            if dlg.exec():
                fnames=dlg.selectedFiles()
                f = open(fnames[0],'r',encoding='utf-8')
                with f:
                    txt = f.read()
                    self.te.setText(txt)
    if __name__=='__main__':
        app = QApplication(sys.argv)
        w = MyFileWidget()
        w.show()
        sys.exit(app.exec())

image.png