在IconMode中的QListView对齐和文本换行

时间:2017-05-20 16:59:57

标签: python python-3.x pyside

我正在使用QListView来显示文件列表。当我使用它的IconMode并且文件名太长时,我希望它将文本分成几行。 PySide documentation告诉setWordWrap函数以其他方式工作:

  

即使启用了换行,也不会展开单元格以为文本腾出空间

但这就是我所需要的:打破文本并正确扩展项目。

那么,我可以使用QListView以文件管理器中经常进行的方式对齐文件吗?例如,Thunar

Text is centered and broken into several lines in 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时,我得到了以下结果:

QListView with setGridSize and textElideMode as ElideNone

否则,我看到完整的名字,但我没有对齐。

QListView without setGridSize

0 个答案:

没有答案