Форум сайта python.su
Здравствуйте!
Пытаюсь сделать приложение на pyqt5 для работы с yandex disk rest api, все было отлично, пока не наступила пора реализовывать виджет в виде списка со статусом загрузки файлов.
За основу взял этот интерфейс:
Как я понял, подобный список можно реализовать через QListWidget и вложить в него QListWidgetItem с QWidget, но не могу понять, как потом изменить один из элементов этого списка, чтобы, например, обновить прогресс бар.
Для обработки и загрузки каждого файла использую такого воркера:
class WorkerYandexUpload(QRunnable): def run(self): ... m = MultipartEncoderMonitor.from_fields(fields={'file': (open(self.file_path, 'rb'))}, callback=self.upload_callback) r = requests.post('http://httpbin.org/post', data=m, headers={'Content-Type': m.content_type}) def upload_callback(self, m): self.signals.test_sign.emit(m.bytes_read)
Отредактировано aiscy (Март 8, 2016 18:12:59)
Офлайн
Как по мне, так тут было бы правильней сделать кастомный контрол, который объединил бы в себе прогрессбар, надпись, иконку и кнопки, а потом этот контрол использовать в VerticalLoyout. А список тут не нужен.
Офлайн
FishHookЕсли они должны добавляться/исчезать до/после закачки, то нужен список. Его легко редактировать.
а потом этот контрол использовать в VerticalLoyout. А список тут не нужен.
aiscyМожешь, без моделей, конечно, сделать это наскоряк (иначе увязнешь в них). А изменить - через систему сигналов и слотов. Обычно и то, и другое уже есть и создавать ничего не надо. Просто надо соединить через connect().
Как я понял, подобный список можно реализовать через QListWidget и вложить в него QListWidgetItem с QWidget, но не могу понять, как потом изменить один из элементов этого списка, чтобы, например, обновить прогресс бар.
Отредактировано py.user.next (Март 9, 2016 13:19:05)
Офлайн
Вот пример того как это делается через модель/представление. https://habrahabr.ru/post/134802/
Если можешь только через QListWidget, то сделай 2 отдельных виджета (для загружаемых и загруженных файлов) с интерфейсом для получения данных.
Офлайн