So I figured out how to display images in QListView: Here is how I did it
import sys
import os
from PyQt4 import QtGui, QtCore
class MyListModel(QtCore.QAbstractListModel):
def __init__(self, datain, parent=None, *args):
""" datain: a list where each item is a row
"""
QtCore.QAbstractListModel.__init__(self, parent, *args)
self.listdata = datain
def rowCount(self, parent=QtCore.QModelIndex()):
return len(self.listdata)
def data(self, index, role):
if index.isValid() and role == QtCore.Qt.DecorationRole:
return QtGui.QIcon(QtGui.QPixmap(self.listdata[index.row()]))
if index.isValid() and role == QtCore.Qt.DisplayRole:
return QtCore.QVariant(os.path.splitext(os.path.split(self.listdata[index.row()])[-1])[0])
else:
return QtCore.QVariant()
class MyListView(QtGui.QListView):
"""docstring for MyListView"""
def __init__(self):
super(MyListView, self).__init__()
# show in Icon Mode
self.setViewMode(QtGui.QListView.IconMode)
crntDir = "/usr/test1/Desktop"
# create table
list_data = []
philes = os.listdir(crntDir)
for phile in philes:
if phile.endswith(".png"):
list_data.append(os.path.join(crntDir, phile))
lm = MyListModel(list_data, self)
self.setModel(lm)
self.show()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = MyListView()
window.show()
window.raise_()
sys.exit(app.exec_())
but now I need how I can have all images displayed of same thumbnail size and the filename should not move them around instead file name should wrap to next line !!! how should I achieve that.
Aspect ratio of a thumbnail in Qt is controlled by the
scaled()
method ofQPixmap
. This method also provides the option to control the size of thumbnail. Call this method on your original pixmap and it will return a new pixmap with the specifiedsize
andAspectRatioMode
.