在前一文中有讲到TableView的基本用法,详细可以参看:106.Python——PyQt5 TableView基本用法实例。本文主要想通过实例演示一下ListView组件用法,它主要用来以列表形式来呈现数据。
实现想法:获取当前目录下的图像文件路径,并在ListView中呈现,选择文件,显示图像。
两个元素:一个ListView组件:名称:lstimg,一个label组件:名称:lblimg,用来显示图像。(页面布局自适应)
UI
1、PyQt应用程序基本框架代码:
包含基本引用、主窗口类、程序入口。
import sys
import os
from PyQt5 import QtCore, QtGui, QtWidgets
from Ui_listview import Ui_MainWindow
class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
if __name__ == '__main__':
app=QtWidgets.QApplication(sys.argv)
MyWindow=MainWindow()
MyWindow.setWindowTitle('ListView')
MyWindow.show()
sys.exit(app.exec_())
2、功能实现(完整代码)
import sys
import os
from PyQt5 import QtCore, QtGui, QtWidgets
from Ui_listview import Ui_MainWindow
class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
#获取当前目录
curdir=os.path.abspath(os.curdir)
#获取当前目录下的所有图片文件
lstimg=["选择文件夹"]
for root,dir,file in os.walk(curdir):
for f in file:
if os.path.splitext(f)[1] in ['.jpg','.png','.bmp']:
lstimg.append(os.path.join(root,f))
#把图片文件列表放到listview中
slm=QtCore.QStringListModel()
slm.setStringList(lstimg)
self.lstimg.setModel(slm)
# label控件的鼠标注单击事件(没有槽函数)
self.lblimg.mousePressEvent=self.lblimg_clicked
#图片列表单击事件
def on_lstimg_clicked(self,index):
#获取当前图片文件名
self.imgname=self.lstimg.model().stringList()[index.row()]
if self.imgname=="选择文件夹":
#打开选择文件夹对话框
dirname=QtWidgets.QFileDialog.getExistingDirectory(self,'选择文件夹')
lstimg=["选择文件夹"]
for root,dir,file in os.walk(dirname):
for f in file:
if os.path.splitext(f)[1] in ['.jpg','.png','.bmp']:
lstimg.append(os.path.join(root,f))
#把图片文件列表放到listview中
slm=QtCore.QStringListModel()
slm.setStringList(lstimg)
self.lstimg.setModel(slm)
else:
#设置lblimg的大小和位置
self.lblimg.setGeometry(self.lstimg.width()+10,0,self.width()-self.lstimg.width(),self.lstimg.height())
#设置图像大小自适应控件大小并显示图像
self.lblimg.setPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(self.imgname)).scaled(self.lblimg.width(),
self.lblimg.height(),QtCore.Qt.KeepAspectRatio))
self.statusBar().showMessage(self.imgname)
#图片单击事件
def lblimg_clicked(self,event):
#获取当前图片大小
#获取图像的宽高
img=QtGui.QImage(self.imgname)
h,w,c=img.height(),img.width(),img.format()
self.statusBar().showMessage("(w,h,c):"+str(w)+","+str(h)+","+str(c))
if __name__ == '__main__':
app=QtWidgets.QApplication(sys.argv)
MyWindow=MainWindow()
MyWindow.setWindowTitle('ListView')
MyWindow.show()
sys.exit(app.exec_())
选择图像文件,显示图像
选择图像文件,显示图像
单击图像,显示图像大小
本文也只是演示一下ListView组件+Label显示图像的基本用法,更多用法可以参看帮助文档。
| 留言与评论(共有 0 条评论) “” |