PyQt和ListModel

时间:2011-06-22 18:34:39

标签: pyqt

如何使用给定路径的内容填充数据列表模型中的数据列表?

这是我正在尝试做的事情:

class TestListModel(QAbstractListModel):
    def __init__(self, parent=None):
        QAbstractListModel.__init__(self, parent)
        self.testnames = []

    def load_docfiles(self):
        cfg = Config()
        for filename in glob.glob(os.path.join(cfg.test_path, 'test_*.rst')):
            self.testnames = os.path.basename(filename)[5:-4]
            filepath = os.path.abspath(filename)
            print "load docfile", str(self.testnames)
        return str(self.testnames)

    def rowCount(self, index):
        return len(self.testnames)

    def data(self, index, role): 
        if role == Qt.DisplayRole:
            cfg = Config()
            for filename in glob.glob(os.path.join(cfg.test_path, 'test_*.rst')):
                self.testnames = os.path.basename(filename)[:-4]
                filepath = os.path.abspath(filename)
        return self.testnames

    def columnCount(self, index):
        pass

另一个问题是如何加载与从我的列表视图中选择的项目相关联的html页面(在qwebview中)?

感谢你!!

1 个答案:

答案 0 :(得分:1)

我认为你误解了Qt中Model类中data方法的用途。 data方法应该将关联的QListView给出的索引映射到testnames列表中的项目,而不是重新加载数据(在您的情况下是文件名列表)。例如,

def data(self, index, role):
    if role == Qt.DisplayRole:
        testname = self.testnames[index.row()]
        return testname

您希望load_docfiles方法在self.testnames中存储文件名列表。你可以像这样重写它:

def load_docfiles(self):
    cfg = Config()
    for filename in glob.glob(os.path.join(cfg.test_path, 'test_*.rst')):
        self.testnames.append(os.path.basename(filename)[5:-4])
        filepath = os.path.abspath(filename)
        print "load docfile", str(self.testnames)

然后可以从您的主应用程序中调用您的课程:

self.view = QtGui.QListView(self)
self.model = TestListModel()
self.model.load_docfiles()
self.view.setModel(self.model)