本文实现一个图片和文本文件选择器的案例,效果如下:
文件选择查看功能很简单,只需要设计好图片文件和文本文件的选择函数就可以了。
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:
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())
下一篇:布局管理