PyQt и ListModel - PullRequest
       5

PyQt и ListModel

0 голосов
/ 22 июня 2011

Как мне заполнить список данных в модели списка данных содержимым заданного пути?

Вот что я пытаюсь сделать:

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 Ответ

1 голос
/ 22 июня 2011

Я думаю, вы неправильно понимаете цель метода data в классах Model в Qt. Вместо перезагрузки ваших данных (в вашем случае список имен файлов), метод 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...