Абсолютная позиция виджета PyQt внутри QVBoxLayout - PullRequest
0 голосов
/ 24 февраля 2019

Я работаю над каким-то проектом PyQt5, я пришел из Web Development и застрял с какой-то тривиальной задачей.У меня есть QVBoxLayout, и внутри него я поместил QWidget, чтобы добавить цвет фона через CSS.После этого я хотел поместить какое-то изображение, self.img прямо в центр QWidget.Но я не мог понять, как это сделать.Он просто отображает мое изображение ниже QWidget и все.

Я пытался использовать метод move (x, y) , пытался использовать фоновое изображение для QWidget, но мне это не удалось.Так что я действительно застрял с этим.

Я пытался найти несколько возможных способов его решения, но я не нашел ничего, что могло бы мне помочь.Если кто-то может помочь мне, я буду очень признателен за любой вклад.Спасибо за любую помощь.

Если честно - я новичок в PyQt.Извините, если я задал какой-то глупый вопрос, но мне действительно нужна помощь.

Вот мой код

import sys

from PyQt5.QtCore import QPoint
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QHBoxLayout
from PyQt5.QtWidgets import QLabel
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtWidgets import QVBoxLayout
from PyQt5.QtWidgets import QWidget
from PyQt5.QtGui import QPixmap



class MainWindow(QWidget):

    def __init__(self):
        super(MainWindow, self).__init__()
        self.layout  = QVBoxLayout()
        self.layout.addWidget(TopContentBlock(self))
        self.layout.addWidget(BottomContentBlock(self))
        self.setLayout(self.layout)
        self.layout.setContentsMargins(0,0,0,0)
        self.layout.setSpacing(0)
        self.layout.addStretch(-1)
        self.setMinimumSize(640,400)
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.pressing = False


class TopContentBlock(QWidget):

    def __init__(self, parent):
        super(TopContentBlock, self).__init__();
        self.parent = parent;
        self.layout = QVBoxLayout()
        self.layout.setContentsMargins(0, 0, 0, 0)

        self.content = QWidget()
        self.content.setFixedSize(640, 250)
        self.content.setStyleSheet("""
         background-color: #67BEC3;
        """)

        self.img = QLabel()
        pixmap = QPixmap('main_illustration.png')
        self.img.setPixmap(pixmap)
        print(pixmap.width(), pixmap.height())
        self.img.resize(pixmap.width(), pixmap.height())
        #self.img.setFixedSize(pixmap.width(), pixmap.height())

        self.layout.addWidget(self.img)
        self.layout.addWidget(self.content)
        self.setLayout(self.layout)


class BottomContentBlock(QWidget):

    def __init__(self, parent):
        super(BottomContentBlock, self).__init__();
        self.parent = parent;
        self.layout = QVBoxLayout()
        self.layout.setContentsMargins(0, 0, 0, 0)

        self.content = QWidget()
        self.content.setFixedSize(640, 400)
        self.content.setStyleSheet("""
            background-color: cyan;
        """)
        self.layout.addWidget(self.content)
        self.setLayout(self.layout)
if __name__ == "__main__":
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())


import resources_new

1 Ответ

0 голосов
/ 24 февраля 2019

Попробуйте:

import sys
from PyQt5.QtCore    import QPoint, Qt
from PyQt5.QtWidgets import (QApplication, QHBoxLayout, QLabel,
                             QPushButton, QVBoxLayout, QWidget)
from PyQt5.QtGui     import QPixmap


class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.layout  = QVBoxLayout()
        self.layout.addWidget(TopContentBlock(self))
        self.layout.addWidget(BottomContentBlock(self))
        self.setLayout(self.layout)
        self.layout.setContentsMargins(0,0,0,0)
        self.layout.setSpacing(0)
#        self.layout.addStretch(1)
        self.setMinimumSize(640,600)                         # 600
        self.setWindowFlags(Qt.FramelessWindowHint)
#?        self.pressing = False


class TopContentBlock(QWidget):
    def __init__(self, parent):
        super(TopContentBlock, self).__init__();
#?        self.parent = parent;
        self.layout = QVBoxLayout()
        self.layout.setContentsMargins(0, 0, 0, 0)

        self.content = QWidget()
        self.content.setFixedSize(640, 200)                  #(640, 250)
        self.content.setStyleSheet("""
         background-color: #67BEC3;
        """)

        self.img = QLabel()
        self.img.setAlignment(Qt.AlignCenter)                # +++

        pixmap = QPixmap('im.png')                           #('main_illustration.png')
#        self.img.setPixmap(pixmap)
        self.img.setPixmap(pixmap.scaled(200, 200,           # +++
                                         Qt.IgnoreAspectRatio, 
                                         Qt.FastTransformation))
#        self.img.resize(pixmap.width(), pixmap.height())
        #self.img.setFixedSize(pixmap.width(), pixmap.height())

        self.layout.addWidget(self.img)
        self.layout.addWidget(self.content)
        self.layout.setSpacing(0)                            # +++
        self.setLayout(self.layout)


class BottomContentBlock(QWidget):
    def __init__(self, parent):
        super(BottomContentBlock, self).__init__();
        self.parent = parent;
        self.layout = QVBoxLayout()
        self.layout.setContentsMargins(0, 0, 0, 0)

        self.content = QWidget()
        self.content.setFixedSize(640, 200)               #(640, 400)
        self.content.setStyleSheet("""
            background-color: cyan;
        """)
        self.layout.addWidget(self.content)
        self.setLayout(self.layout)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())

enter image description here


Обновление

import sys
from PyQt5.QtCore    import QPoint, Qt
from PyQt5.QtWidgets import (QApplication, QHBoxLayout, QLabel,
                             QPushButton, QVBoxLayout, QWidget)
from PyQt5.QtGui     import QPixmap


class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.layout  = QVBoxLayout()
        self.layout.addWidget(TopContentBlock(self))
        self.layout.addWidget(BottomContentBlock(self))
        self.setLayout(self.layout)
        self.layout.setContentsMargins(0,0,0,0)
        self.layout.setSpacing(0)
#        self.layout.addStretch(1)
        self.setMinimumSize(640,400)                         # 400
        self.setWindowFlags(Qt.FramelessWindowHint)
#?        self.pressing = False


class TopContentBlock(QWidget):
    def __init__(self, parent):
        super(TopContentBlock, self).__init__();
#?        self.parent = parent;
        self.layout = QVBoxLayout()
        self.layout.setContentsMargins(0, 0, 0, 0)

#        self.content = QWidget()                            # --- <---
        self.setFixedSize(640, 200)                          # --- .content              
        self.setStyleSheet("""                               
         background-color: #67BEC3;
        """)                                                 # --- .content 

        self.img = QLabel()
        self.img.setAlignment(Qt.AlignCenter)                # +++

        pixmap = QPixmap('im.png')                           #('main_illustration.png')
#        self.img.setPixmap(pixmap)
        self.img.setPixmap(pixmap.scaled(200, 200,           # +++
                                         Qt.IgnoreAspectRatio, 
                                         Qt.FastTransformation))
#        self.img.resize(pixmap.width(), pixmap.height())
        #self.img.setFixedSize(pixmap.width(), pixmap.height())

        self.layout.addWidget(self.img)
#        self.layout.addWidget(self.content)                 # ---
        self.layout.setSpacing(0)                            # +++
        self.setLayout(self.layout)


class BottomContentBlock(QWidget):
    def __init__(self, parent):
        super(BottomContentBlock, self).__init__();
        self.parent = parent;
        self.layout = QVBoxLayout()
        self.layout.setContentsMargins(0, 0, 0, 0)

        self.content = QWidget()
        self.content.setFixedSize(640, 200)               #(640, 400)
        self.content.setStyleSheet("""
            background-color: cyan;
        """)
        self.layout.addWidget(self.content)
        self.setLayout(self.layout)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...