PyQt5入門(mén)之基于QListWidget版本實(shí)現(xiàn)圖片縮略圖列表功能
需求描述
最近在寫(xiě)一個(gè)圖像標(biāo)注小工具,其中需要用到一個(gè)縮略圖列表,來(lái)查看文件夾內(nèi)的圖片文件。
這里整理一個(gè)基于QListWidget實(shí)現(xiàn)的版本,簡(jiǎn)單可用。
示例效果

代碼示例
QListWidget官方文檔:[link]
其中,需要用到的QListWidget信號(hào):
itemSelectionChanged:所選項(xiàng)發(fā)生變化時(shí)發(fā)送。
先定義縮略圖列表部分,繼承自QListWidget。每個(gè)QListWidgetItem可以設(shè)置QIcon圖片和文本。
import os
from qtpy.QtCore import QSize
from qtpy.QtGui import QIcon,QPixmap
from PyQt5.QtWidgets import QListWidget,QListWidgetItem,QListView,QWidget,QApplication,QHBoxLayout,QLabel
class ImageListWidget(QListWidget):
def __init__(self):
super(ImageListWidget, self).__init__()
self.setFlow(QListView.Flow(1))#0: left to right,1: top to bottom
self.setIconSize(QSize(150,100))
def add_image_items(self,image_paths=[]):
for img_path in image_paths:
if os.path.isfile(img_path):
img_name = os.path.basename(img_path)
item = QListWidgetItem(QIcon(img_path),img_name)
# item.setText(img_name)
# item.setIcon(QIcon(img_path))
self.addItem(item)
再來(lái)簡(jiǎn)單布局下窗體控件:
左邊區(qū)域用QLabel加載圖像,右邊區(qū)域是圖片縮略圖列表,點(diǎn)擊縮略圖,可以在左邊查看大圖。
class ImageViewerWidget(QWidget):
def __init__(self):
super(QWidget, self).__init__()
# 顯示控件
self.list_widget = ImageListWidget()
self.list_widget.setMinimumWidth(200)
self.show_label = QLabel(self)
self.show_label.setFixedSize(600,400)
self.image_paths = []
self.currentImgIdx = 0
self.currentImg = None
# 水平布局
self.layout = QHBoxLayout(self)
self.layout.addWidget(self.show_label)
self.layout.addWidget(self.list_widget)
# 信號(hào)與連接
self.list_widget.itemSelectionChanged.connect(self.loadImage)
def load_from_paths(self,img_paths=[]):
self.image_paths = img_paths
self.list_widget.add_image_items(img_paths)
def loadImage(self):
self.currentImgIdx = self.list_widget.currentIndex().row()
if self.currentImgIdx in range(len(self.image_paths)):
self.currentImg = QPixmap(self.image_paths[self.currentImgIdx]).scaledToHeight(400)
self.show_label.setPixmap(self.currentImg)
加載一些圖片路徑,并運(yùn)行窗口:
if __name__=="__main__":
import sys
app = QApplication(sys.argv)
# 圖像路徑
img_dir = r"E:\Pic"
filenames = os.listdir(img_dir)
img_paths=[]
for file in filenames:
if file[-4:]==".png" or file[-4:]==".jpg":
img_paths.append(os.path.join(img_dir,file))
# 顯示控件
main_widget = ImageViewerWidget()
main_widget.load_from_paths(img_paths)
main_widget.setWindowTitle("ImageViewer")
main_widget.show()
# 應(yīng)用程序運(yùn)行
sys.exit(app.exec_())
小結(jié)
- 上面代碼只是一個(gè)實(shí)現(xiàn)思路,實(shí)際應(yīng)用中最好另開(kāi)一個(gè)線程加載圖片,并且隨著滾動(dòng)條下拉,再不斷加載緩存。
- QListWidget可以實(shí)現(xiàn)簡(jiǎn)單的圖標(biāo)+文字列表,如果列表項(xiàng)中涉及自定義控件和其他操作邏輯,建議采用QListView和Model實(shí)現(xiàn)。
到此這篇關(guān)于PyQt5入門(mén)之QListWidget實(shí)現(xiàn)圖片縮略圖列表功能的文章就介紹到這了,更多相關(guān)PyQt5 QListWidget圖片縮略圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python利用shutil實(shí)現(xiàn)拷貝文件功能
shutil?是一個(gè)?Python?內(nèi)置模塊,該模塊對(duì)文件的復(fù)制、刪除和壓縮等操作都提供了非常方便的支持。本文將利用shutil實(shí)現(xiàn)拷貝文件功能,需要的可以參考一下2022-07-07
python中ThreadPoolExecutor線程池和ProcessPoolExecutor進(jìn)程池
這篇文章主要介紹了python中ThreadPoolExecutor線程池和ProcessPoolExecutor進(jìn)程池,文章圍繞主題相關(guān)資料展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06
python3 pillow模塊實(shí)現(xiàn)簡(jiǎn)單驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了python3 pillow模塊實(shí)現(xiàn)簡(jiǎn)單驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
使用Pandas進(jìn)行Excel數(shù)據(jù)處理的操作和技巧
在數(shù)據(jù)處理和分析的過(guò)程中,Excel是一個(gè)非常常見(jiàn)的工具,然而,當(dāng)數(shù)據(jù)量變大,操作復(fù)雜度增加時(shí),Excel的效率和功能可能無(wú)法滿足需求,Pandas是一個(gè)強(qiáng)大的Python數(shù)據(jù)處理庫(kù),本文將介紹如何使用Pandas進(jìn)行Excel數(shù)據(jù)處理,并展示一些常見(jiàn)的操作和技巧2023-11-11

