龙空技术网

84.Python——使用PyQt的ScrollArea滚动显示大尺寸图像

UNET 755

前言:

如今小伙伴们对“scrollpicjs”大体比较着重,咱们都需要剖析一些“scrollpicjs”的相关内容。那么小编也在网上网罗了一些对于“scrollpicjs””的相关知识,希望朋友们能喜欢,兄弟们一起来了解一下吧!

想法:在程序界面上滚动显示一张大尺寸的图像,单击图像可以自适应显示。

实现:当图像的大小超过图片展示区时,但又要显示原始图像大小。可以考虑使用ScrollArea来滚动显示图像。

演示界面UI

界面元素:一个ListView,用来加载目录中的图像文件名,一个ScrollArea,里面放置一个Label,用来显示图像。

界面UI

实现功能和代码:

import sysimport osfrom PyQt5 import QtCore, QtGui,QtWidgetsfrom Ui_picview import Ui_MainWindow  class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):    def __init__(self):        super().__init__()        self.setupUi(self)                self.imgname=""        #设置图片控件的双击事件        self.lblimg.mousePressEvent=self.img_scale        #设置图片控件文本提示        self.lblimg.setToolTip("双击自动调整大小")        #获取当前目录        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)                #图片列表单击事件    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:            #获取图像的宽高            img=QtGui.QImage(self.imgname)            h,w,c=img.height(),img.width(),img.format()                        #设置scrollarea的滚动范围和自动调整大小            self.scrollAreaWidgetContents.setMinimumSize(w,h)                        #设置图像控件的宽高            self.lblimg.setFixedSize(w,h)            #显示图片            self.lblimg.setPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(self.imgname)))            self.statusBar().showMessage(self.imgname)                #图像控件鼠标注事件,    def img_scale(self,event):        #设置大小为滚动区域的大小        self.lblimg.setFixedSize(self.scroll.width(),self.scroll.height())                #设置图像大小自适应控件大小        self.lblimg.setPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(self.imgname)).scaled(self.lblimg.width(),                                                                                         self.lblimg.height(),QtCore.Qt.KeepAspectRatio))        if __name__ == '__main__':    app=QtWidgets.QApplication(sys.argv)    window=MainWindow()    window.setWindowTitle("picview")    window.show()    sys.exit(app.exec_())
实现效果

当图像大小超过滚动区域时,就可以使用滚动来显示图像

显示左上部分图像

滚动显示右下部分图像

双击图片自适应显示整幅图像

标签: #scrollpicjs