我正在使用QListView
来显示文件列表。当我使用它的IconMode并且文件名太长时,我希望它将文本分成几行。 PySide documentation告诉setWordWrap
函数以其他方式工作:
即使启用了换行,也不会展开单元格以为文本腾出空间
但这就是我所需要的:打破文本并正确扩展项目。
那么,我可以使用QListView
以文件管理器中经常进行的方式对齐文件吗?例如,Thunar:
这是我目前的代码:
import sys
from random import randint
from PySide import QtGui
from PySide import QtCore
app = QtGui.QApplication(sys.argv)
def gen_random_qicon():
pixmap = QtGui.QPixmap(64, 64)
pixmap.fill(
QtGui.QColor(
randint(0,255), randint(0,255), randint(0,255), 255
)
)
icon = QtGui.QIcon()
icon.addPixmap(pixmap)
return(icon)
class Test_model(QtCore.QAbstractListModel):
def __init__(self, parent=None):
super(Test_model, self).__init__(parent)
self.__items = []
def appendItem(self, item):
index = len(self.__items)
self.beginInsertRows(QtCore.QModelIndex(), index, index)
self.__items.append(item)
self.endInsertRows()
def rowCount(self, parent):
return len(self.__items)
def data(self, index, role):
image = self.__items[index.row()]
if role == QtCore.Qt.DisplayRole:
return image['name']
if role == QtCore.Qt.DecorationRole:
return gen_random_qicon()
return None
test_names = ["AB", "UO0E5", "WTRE76", "OSBTTEJ", "M4T2GW4Y55", "LI QM6WJKBC",
"B4MO4 R6JD6"]
test_model = Test_model()
for tn in test_names:
test_model.appendItem({"name": tn})
lv = QtGui.QListView()
lv.setFlow(QtGui.QListView.LeftToRight)
lv.setResizeMode(QtGui.QListView.Adjust)
lv.setViewMode(QtGui.QListView.IconMode)
# Grid
lv.setGridSize(QtCore.QSize(64, 64))
lv.setTextElideMode(QtCore.Qt.ElideNone)
lv.setModel(test_model)
lv.resize(250, 200)
lv.show()
sys.exit(app.exec_())
当我使用setGridSize
函数并将textElideMode设置为ElideNone
时,我得到了以下结果:
否则,我看到完整的名字,但我没有对齐。