Отображение изображений в QListView с одинаковым размером миниатюры с сохранением соотношения сторон
Итак, я выяснил, как отображать изображения в QListView: вот как я это сделал
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_())
но теперь мне нужно, чтобы я мог отображать все изображения одинакового размера, и имя файла не должно перемещать их, а имя файла должно переноситься на следующую строку!!! как мне этого добиться.
1 ответ
class MyListView(QtWidgets.QListView):
"""docstring for MyListView"""
def __init__(self):
super(MyListView, self).__init__()
# show in Icon Mode
self.setViewMode(QtWidgets.QListView.IconMode)
self.setIconSize(QtCore.QSize(80, 80)) #set icon size
self.setGridSize(QtCore.QSize(100, 100)) #set icon grid display
# self.selectionModel(self.selectedIndexes())
crntDir = "D:/temp"
# 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()
Соотношение сторон миниатюры в Qt контролируется scaled()
метод QPixmap
, Этот метод также предоставляет возможность контролировать размер миниатюры. Вызовите этот метод для вашего исходного растрового изображения, и он вернет новое растровое изображение с указанным size
а также AspectRatioMode
,