Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
zxbpouk
0 / 0 / 1
Регистрация: 16.12.2016
Сообщений: 8
#1

Pyqt5 listWidget + bad Gugl

19.02.2018, 23:23. Просмотров 762. Ответов 2
Метки нет (Все метки)

Приветствую!

Проблема заключается в том, чтобы создать делегата в котором можно отключать текст, оставляя на виду одну лишь иконку.
Была бы лишь эта проблема, горя бы не знал. Но по своей традиции, перерыл несколько десятков, или даже пару сотен сайтов по проблеме, но не обнаружил даже проблеска ответа.

Оказалось, что в интернете, в котором есть все, можно узнать все основное и только для чайников. А как прикрутить делегата к QListWidget, чтобы отображалась и иконка и текст - вот такой информации нет.

На Python я перешел недавно, поэтому нужны конкретные примеры. Весь Github перелопачивать смысла нет. В поисках эта конкретность теряется.

Где можно более подробно узнать про механизмы делегирование? Заранее спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2018, 23:23
Ответы с готовыми решениями:

Pyqt5 listWidget+checkbox
Добрый день. Помогите разобраться. Создал лист с чекбоксами, заполнил его....

PyQt5
В чем проблема? Обычный код с сайта...

Комментарии к PyQT5
Доброго времени суток, сейчас занимаюсь изучением pyqt5 читаю документацию по...

PyQt5 установка
взял вот эту инструкцию...

Установка PyQt5
Всем привет. У меня стоит Ubuntu 14.04, решил установить PyQt5. Скачал...

2
alex925
2670 / 2278 / 629
Регистрация: 19.03.2012
Сообщений: 8,830
20.02.2018, 21:18 #2
zxbpouk, вариант с передачей пустой строки при добавлении элемента не устраивает?
0
zxbpouk
0 / 0 / 1
Регистрация: 16.12.2016
Сообщений: 8
24.02.2018, 19:26  [ТС] #3
Лучший ответ Сообщение было отмечено zxbpouk как решение

Решение

Спасибо. Не совсем устраивают пустые кавычки. Покопался интенсивнее - нашел решение проблемы. Получилось, что и делегат не нужен. У одного китайца нашел код модели, которая хорошо решает мою проблему. Отказался от QListWidget в пользу QListView.


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class UserModel(QAbstractListModel):
    def __init__(self, data=None, parent=None):
        QAbstractListModel.__init__(self, parent)
        self._data = data
 
    def rowCount(self, parent=None, *args, **kwargs):
        return len(self._data)
 
    def data(self, QModelIndex, role=None):
        item = self._data[QModelIndex.row()]
 
        if role == Qt.DisplayRole:
            return "%s" % (item['name'])
        elif role == Qt.DecorationRole:
            return QColor(item['color'])
        elif role == Qt.BackgroundRole:
            return QBrush(Qt.Dense7Pattern)
        elif role == Qt.ToolTipRole:
            return "Tool Tip: %s" % (item['name'])
        return QVariant()
Модель подключается в MainWindow:

Python
1
2
3
4
5
6
7
8
9
        fruits = [
            {"name": "banana", "color": "yellow", "bg_color": "yellow"},
            {"name": "apple", "color": "red", "bg_color": "red"},
            {"name": "pear", "color": "green", "bg_color": "gray"},
        ]
 
        view = QListView(self)
        model = UserModel(fruits)
        view.setModel(model)
Но, поскольку мне нужно визуализировать список файлов, то класс UserModel немного подстроил под свои нужды.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class UserModel(QAbstractListModel):
 
    def __init__(self, dirs, data=None, parent=None):
        QAbstractListModel.__init__(self, parent)
        self._data = data
        self.dirs =dirs +"/"
    
 
    def rowCount(self, parent=None, *args, **kwargs):
 
        return len(self._data)
 
    def data(self, QModelIndex, role=None):
 
        item = self._data[QModelIndex.row()]
 
#        if role == Qt.DisplayRole: 
#            return "%s" % item
 
        if role == Qt.DecorationRole:
            return QPixmap(self.dirs + item).scaledToHeight(120)
        elif role == Qt.ToolTipRole:
            return item
        return QVariant()
 
    def flags(self, QModelIndex):
 
        return Qt.ItemIsEditable | Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsTristate
 
    def setData(self, QModelIndex, value, role=None):
 
        self._data[QModelIndex.row()]['name'] = value
        return True
DisplayRole убрал, поскольку DisplayRole выводит текст. Добавил в класс переменную dirs. Текст отобразил во всплывающих подсказках. Подключаюсь таким образом:

Python
1
2
3
4
5
6
7
8
9
        startingDir = '/home/user/Image' 
        directory = QFileDialog.getExistingDirectory(None, 
                                                         'Open working directory', 
                                                         startingDir, 
                                                         QFileDialog.ShowDirsOnly)
 
        files = os.listdir(directory) 
        model = UserModel(directory, files,  )
        self.listView.setModel(model)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2018, 19:26

PyQt5 python 3.4.1
Приветствую всех и прошу помощи! нужна программа в которой 4 строчки куда...

Установка PyQt5
Не могу установить PyQt5. Скачал с официального сайта и запустил файл...

Не работает PyQt5
Здравствуйте. Недавно обновлял python - удалил все, что связано с python и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru