Как добавить фоновое изображение в QWidget и добавить поверх него позиционный QLineedit? - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь установить фоновое изображение для QWidget, и поверх него есть какой-то QlineEdit.

Так что, знаете, у меня есть этот код

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
class Model_GUI(QMainWindow):
    def __init__(self, parent= None ):
        super(Model_GUI, self).__init__()

        self.left = 0
        self.top = 0
        self.width = 800
        self.height = 800
        self.resize(self.width,self.height)

        GB = QGroupBox(" Gain ")
        GB_layout = QHBoxLayout()
        label = QLabel('A')
        edit  = QLineEdit('1')
        GB_layout.addWidget(label)
        GB_layout.addWidget(edit)
        GB.setLayout(GB_layout)

        GB2 = QGroupBox(" Gain ")
        GB_layout2 = QHBoxLayout()
        label2 = QLabel('A')
        edit2 = QLineEdit('1')
        GB_layout2.addWidget(label2)
        GB_layout2.addWidget(edit2)
        GB2.setLayout(GB_layout2)

        #Graph
        Graph = graph()

        self.CentralWidget = QWidget()
        self.globallayout = QHBoxLayout()
        self.globallayout.addWidget(GB)
        self.globallayout.addWidget(Graph)
        self.globallayout.addWidget(GB2)

        self.CentralWidget.setLayout(self.globallayout)
        self.setCentralWidget(self.CentralWidget)


class graph(QWidget):

    def __init__(self):
        super().__init__()
        self.setFixedSize(600,600)

        oImage = QImage("img.png")
        sImage = oImage.scaled(QSize(self.width(), self.height()))  # resize Image to widgets size
        palette = QPalette()
        palette.setBrush(10, QBrush(sImage))  # 10 = Windowrole
        self.setPalette(palette)

        self.label1 = QLabel('Param1', self)
        self.edit1 = QLineEdit('1', self)
        self.label2 = QLabel('Param2', self)
        self.edit2 = QLineEdit('10', self)
        self.label1.move(50, 50)
        self.edit1.move(500, 50)
        self.label2.move(50, 500)
        self.edit2.move(500, 500)


def main():
    app = QApplication(sys.argv)
    ex = Model_GUI(app)
    ex.setWindowTitle('window')
    ex.show()
    sys.exit(app.exec_( ))


if __name__ == '__main__':
    main()

, но когда я выполняюесли у меня нет изображения в QWidget (в центре).

enter image description here

Если я заменим ex = Model_GUI(app) на ex = graph(), яимеют правильное ожидание:

enter image description here

Я не понимаю, почему изображение установлено правильно, когда я использую только QWidget, но это не такустановить правильно, когда я встроил его в QMainWindow?

1 Ответ

2 голосов
/ 01 октября 2019

QWidgets используют свою роль QPalette.Window только в том случае, если они являются виджетами верхнего уровня (как в «окнах»), в противном случае вместо них используется родительский фон, если только свойство autoFillBackground (по умолчанию false). ) имеет значение true.

Просто установите свойство в инициализации виджета:

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