Задать вопрос

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

задача сделать список контактов в левой части элемента QScrollArea, каждый элемент прокручиваемого списка должен быть фиксированной высоты и опираться при заполнении на верх. Как это сделать? Вот код

from PySide6.QtWidgets import *
from PySide6.QtGui import *
from PySide6.QtCore import *

import sys

class Color(QWidget):

    def __init__(self, color):
        super(Color, self).__init__()
        self.setAutoFillBackground(True)

        palette = self.palette()
        palette.setColor(QPalette.Window, QColor(color))
        self.setPalette(palette)

class UrlImage(QLabel):
    def __init__(self, url : str, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.image = QImage()
        import requests
        self.image.loadFromData(requests.get(url).content)
        self.setPixmap( QPixmap.fromImage(self.image))

class UserAvatar(QWidget):
    def __init__(self, contact, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.setFixedSize(200, 40)

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowTitle("Hello World")
        self.setCentralWidget(UrlImage("https://c0.wallpaperflare.com/preview/115/811/694/simple-background-abstract-slick.jpg"))

        self.contactsScroll = QScrollArea(self)
        self.contactsScroll.setGeometry(2,0, 200, self.height())
        self.contactsScroll.setAttribute(Qt.WA_TranslucentBackground, True)
        self.contactsScroll.setStyleSheet("background-color: rgba(0,0,0,150);")
        self.contactsScroll.setLayout(QVBoxLayout())
        
        self.show()

        self.addContact("NICKNAME", "{URL}", "SERVICE_NAME", "SERVICE_URL")

    def addContactItem(self, contact): 
        self.contactsScroll.addScrollBarWidget(UserAvatar(contact))

    def addContact(self, nickname : str, avatar_url : str, service_name : str, service_url : str) -> None:
        widget = QWidget(self.contactsScroll)
        
        self.contactsScroll.layout().addWidget(widget)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = MainWindow()
    app.exec()
  • Вопрос задан
  • 54 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы