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

Почему размер изображения не изменяется?

Вот код
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):
    ImagesLoaded = {}

    def __init__(self, url : str, *args, **kwargs):
        super().__init__(*args, **kwargs)
        
        self.image = QImage()

        if not self.ImagesLoaded.get(url):
            import requests
            content = requests.get(url).content
            self.image.loadFromData(content)
            self.ImagesLoaded[url] = content
        else:
            self.image.loadFromData(self.ImagesLoaded[url])

        self.pixmap = QPixmap.fromImage(self.image)
        self.setPixmap( self.pixmap )

    def resizeEvent(self, event):
        print(event)
        self.setPixmap(self.pixmap.scaled(event.size().width(), event.size().height()))

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

        self.setFixedSize(200, 40)


class ПрокручиваемыйВертикальноКонтент(QScrollArea):
    def __init__(self, *args, **kwargs):
        QScrollArea.__init__(self, *args, **kwargs)

        layout = QVBoxLayout()
        layout.setContentsMargins(0,0,0,0)
        layout.setSpacing(0)
        self._layout = layout

    def addWidget(self, widget : QWidget):
        self._layout.addWidget(widget)
        self._layout.addStretch()

        w = QWidget()
        w.setLayout(self._layout)
        self.setWidget(w)

class ПрокручиваемоеМенюКонтента(QWidget):
    def __init__(self, *args, **kwargs):
        QWidget.__init__(self, *args, **kwargs)

        self.левоеМеню = ПрокручиваемыйВертикальноКонтент(parent=self)

        self.иконкаРаскрытияМеню = UrlImage("https://static.thenounproject.com/png/2393596-200.png", parent=self.левоеМеню)
        self.иконкаРаскрытияМеню.setGeometry(0,0, 40, 40)
        self.левоеМеню.addWidget(self.иконкаРаскрытияМеню)

        self.контентЗона = QWidget(self)
        #self.контентЗона.setStyleSheet("background-color: rgba(255,255,255,55)")
        self.идентификацияПанелей = {}

        self.левоеМеню.resize(50, self.height())
        self.левоеМеню.resizeEvent = lambda event: self.resizeEvent(event)

        def OnMouseReleaseEvent(event):
            if not hasattr(self, "panelToggleOpen") or self.panelToggleOpen is None:
                self.panelToggleOpen = True
            else:
                self.panelToggleOpen = None

            self.anim = QPropertyAnimation(self.левоеМеню, b"size")
            self.anim.setEasingCurve(QEasingCurve.OutBounce)
            self.anim.setEndValue(self.panelToggleOpen and QSize(210, self.height()) or QSize(40, self.height()))
            self.anim.setDuration(1000)
            self.anim.start()

        self.иконкаРаскрытияМеню.mouseReleaseEvent=OnMouseReleaseEvent
  
    def resizeEvent(self, event):
        self.левоеМеню.setGeometry(0,0, self.левоеМеню.width(), self.height())
        self.контентЗона.setGeometry(self.левоеМеню.width(), 0, self.width() - self.левоеМеню.width(), self.height())

        for k, v in self.идентификацияПанелей.items():
            v.контентПанель.resize(self.контентЗона.width(), self.контентЗона.height())

    def указатьПанельОтображения(self, id : str):
        pass

    def добавитьЭлементВМеню(self, id : str, text : str, iconUrl : str):
        widget = QWidget()
        widget.setFixedHeight(50)
        widget.setFixedWidth(200)
        widget.setStyleSheet(":hover{background:#000000}")
        widget._id = id
        def mouseReleaseEvent(event):
            self.приНажатииНаЭлемент(widget, id)

        widget.mouseReleaseEvent = mouseReleaseEvent

        icon = UrlImage(iconUrl, parent=widget)
        icon.resize(50,50)
        icon.move(-5, 0)

        label = QLabel(text, parent=widget)
        label.move(icon.width()+15, widget.height() / 2 - label.height()/4)

        self.левоеМеню.addWidget(widget)
        
        контентПанель = QWidget(self.контентЗона)
        контентПанель.hide()
        контентПанель.setGeometry(0,0, self.контентЗона.width(), self.контентЗона.height())
        widget.контентПанель = контентПанель
        self.идентификацияПанелей[id] = widget
        return контентПанель

    def получитьКонтентПанель(self, id : str) -> QWidget:
        return self.идентификацияПанелей[id].контентПанель


    def приНажатииНаЭлемент(self, widget : QWidget, id : str):
        self.получитьКонтентПанель(id).show()

        for k, v in self.идентификацияПанелей.items():
            if k != id: v.контентПанель.hide()

    def добавитьЭлементПользователяВСписок(self, id : str, nickname : str, iconUrl : str, serviceUrl : str):
        widget = QWidget()
        widget.setGeometry(0,0,200, 50)
        widget.setFixedHeight(50)
        widget.setFixedWidth(200)
        widget.setStyleSheet("""background-color: rgba(0,0,0,155)""")

        def OnMouseReleaseEvent(event): pass

        widget.mouseReleaseEvent=OnMouseReleaseEvent

        labelNickname = QLabel(nickname, parent=widget)
        labelNickname.move(widget.height(), 0)

        avatar = UrlImage(iconUrl, parent=widget)
        avatar.resize(widget.height(), widget.height())
        avatar.setStyleSheet("background-color: rgba(0,0,0,0)")

        serviceImage = UrlImage(serviceUrl, parent=avatar)
        serviceImage.resize(avatar.width() / 2, avatar.height() / 2)
        serviceImage.move(avatar.width() / 2, avatar.height() / 2)
        
        self.левоеМеню.addWidget(widget)


class MainWindow(QMainWindow):
    def resizeEvent(self, event):
        self.меню.setGeometry(0,0, event.size().width(), event.size().height())
        self.пользователиМеню.resize(400, self.height())

        QMainWindow.resizeEvent(self, event)

    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.меню = ПрокручиваемоеМенюКонтента(self)
        пользователи = self.меню.добавитьЭлементВМеню("users", "ПОЛЬЗОВАТЕЛИ", "https://cdn0.iconfinder.com/data/icons/set-ui-app-android/32/8-512.png")
        self.пользователиМеню = ПрокручиваемоеМенюКонтента(пользователи)
        
        self.меню.добавитьЭлементВМеню("settings", "НАСТРОЙКИ", "https://icons.veryicon.com/png/256/miscellaneous/standard-general-linear-icon/settings-101.png")
        for i in range (3):
            self.пользователиМеню.добавитьЭлементПользователяВСписок("id","NICKNAME", "https://www.svgrepo.com/show/384674/account-avatar-profile-user-11.svg", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSpJ27FVfkM_2ubo4TV6iQXfET93AFER9M6xA&s")
            self.пользователиМеню.добавитьЭлементПользователяВСписок("id", "NICKNAME", "https://www.svgrepo.com/show/384674/account-avatar-profile-user-11.svg", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSpJ27FVfkM_2ubo4TV6iQXfET93AFER9M6xA&s")
            self.пользователиМеню.добавитьЭлементПользователяВСписок("id", "NICKNAME", "https://img.freepik.com/premium-vector/professional-male-avatar-profile-picture-employee-work_1322206-66590.jpg", "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR8aMugg7LWDXqkWc-9JlApM4MLPXhi-EPDYA&s")
            
        self.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = MainWindow()
    app.exec()


изображение в верху шапки должно быть такого же размера как и другие ниже, но по какой то причине изменение размера игнорируется.
67b0c6348ff32206718157.png
  • Вопрос задан
  • 67 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

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

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