Вывод текста в окно PyQt5

Я пишу приложение на PyQt5 и вот в чем проблема. Я хочу в оконном приложении отобразить текст, который уже есть в программе.
Но я не могу его вывести на экран.

При этом я нашел пример, который оказался рабочим, но при интеграции этого примера в мой код ничего не происходит.

Вот рабочий пример: https://doc.qt.io/qtforpython-5/quickstart.html

Вот мой код:

from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QPushButton, QLabel, 
QVBoxLayout
from PyQt5.QtGui import QIcon
import sys

class Program(QMainWindow, QWidget):
def __init__(self):
    super().__init__()
    self.windoww = QMainWindow()
    self.windoww.setObjectName("MainWindow")
    self.windoww.resize(1000, 561)

    self.button_create = QPushButton('Button', self.windoww)
    self.button_settings = QPushButton('Button', self.windoww)
    self.button_about = QPushButton('Button', self.windoww)

    self.text = QLabel("Hello World",
                                #  alignment=QtCore.Qt.AlignCenter
                                 )

    self.layoutt = QVBoxLayout()
    self.layoutt.addWidget(self.text)

    self.setLayout(self.layoutt)

    self.button_about.setStyleSheet('''QPushButton {
                        background-image : url(images/Rectangle 9.png);
                        border-style: outset;
                        
                        border-radius: 10px;
                        border-color: beige;
                        font: bold 14px;
                        min-width: 10em;
                        padding: 6px;
                    }''')
    self.button_create.move(430, 245)
    self.button_settings.move(430, 330)
    self.button_about.setGeometry(170, 421, 260, 65)
    # self.button_about.move(430, 400)

    self.button_about.clicked.connect(lambda: [
        self.clean_data([self.button_create, 
                self.button_settings, 
                self.button_about]),
        self.about_program()
        ])

    self.initUI("images/Frame 1.png")


def about_program(self):
    self.layoutt = QVBoxLayout()
    self.label_4 = QLabel()
    self.label_4.setText(
        'В одном из приведённых ниже слов допущена ошибка в \nпост'
        'ановке ударения: НЕВЕРНО выделена буква, \nобозначающая '
        'ударный гласный звук. Выпишите это слово.')

    self.layoutt.addWidget(self.label_4)
    self.setLayout(self.layoutt)
    # self.text = "Данно приложение предназначено для создания магического квадрата в разных вариациях. \
    #     Запомните, программа способна создать квадрат только из положительных целых чисел. Аналогов \
    #         данной программы нет, поэтому пользуйтесь, дорогие уроды =)"

    # self.panel.move(430, 245)

def initUI(self, path):
    self.windoww.setStyleSheet("#MainWindow{border-image:url("f'{path}'")}")
    self.windoww.setWindowTitle('Icon')
    self.windoww.setWindowIcon(QIcon('web.png'))
    self.windoww.show()

def clean_data(self, *args):
    for arg in args:
        for object_name in arg:
            object_name.deleteLater()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Program()
    sys.exit(app.exec_())

Текст, который хочу вывести находится в методе about_program().
Надеюсь вы сможете помочь.


Ответы (1 шт):

Автор решения: S. Nick

Вам надо определиться, какой виджет для главного окна использовать.
QMainWindow наследуется от QWidget, но он немного сложнее.
Вам надо хорошенько познакомиться с Qt Main Window Framework, прежде чем его использовать.

Вам надо глубже изучить использование менеджеров компоновки.

В вашем примере достаточно одного QGridLayout.

В вашем код ничего не происходит, потому что вы накрываете объектом self.text ваши кнопки, для которых вы зачем-то решили использовать абсолютное позиционирование.

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, \
    QPushButton, QLabel, QVBoxLayout, QGridLayout
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt

# --------- или -> vvvvvvvvvvv  vvvvvvv <---- или -----------------------------
# ???class Program(QMainWindow, QWidget):
class Program(QWidget):
    def __init__(self):
        super().__init__()
# ???    self.windoww = QMainWindow()
        self.setObjectName("mainwindow")                                   # +++

        self.button_create = QPushButton('button_create')
        self.button_create.setObjectName("button_create")
        
        self.button_settings = QPushButton('button_settings')
        self.button_settings.setObjectName("button_settings")
        
        self.button_about = QPushButton()
        self.button_about.setObjectName("button_about")                   # +++
        self.button_about.clicked.connect(self.about_program)             # +++
        
        '''                                            ---->  я не понимаю что это
        self.button_about.clicked.connect(lambda: [
            self.clean_data([self.button_create, 
                    self.button_settings, 
                    self.button_about]),
            self.about_program()
            ])
        '''
# ---------> vvvvv <--------------------------------------------------------------
        self.label = QLabel("Hello World", alignment=Qt.AlignCenter)
        self.label.setObjectName("label")

#        self.layoutt = QVBoxLayout()
#        self.setLayout(self.layoutt)

        self.layout = QGridLayout(self)                              # +++ QGridLayout
        self.layout.addWidget(self.label, 0, 0, 5, 5)
        self.layout.addWidget(self.button_create, 1, 5)
        self.layout.addWidget(self.button_settings, 3, 5)
        self.layout.addWidget(self.button_about, 6, 1, 1, 3)

    def about_program(self):
# ???    self.layoutt = QVBoxLayout()
# ???    self.label_4 = QLabel()
# ???    self.label_4.setText(
# ---------> vvvvv <--------------------------------------------------------------
        self.label.setText(
            'В одном из приведённых ниже слов допущена ошибка в \nпост'
            'ановке ударения: НЕВЕРНО выделена буква, \nобозначающая '
            'ударный гласный звук. Выпишите это слово.')

# ???    self.layout.addWidget(self.label_4)
# ???    self.setLayout(self.layout)

'''                                          ---->  я не понимаю что это
    def clean_data(self, *args):
        for arg in args:
            for object_name in arg:
                object_name.deleteLater()
'''                

# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv !!! +++
QSS = '''
#mainwindow {
    background-color: #a1193d;
}
#label {
    background-color: #105652;
    color: #fff;
    font-size: 24px;
}
#button_about {
    image: url(boy33.png);
    background-color: #333312;
    min-height: 10em;
}
#button_about:hover {
    background-color: #565612;
}
'''
                

if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyleSheet(QSS)                                    # <---- !!! +++
    ex = Program()
    ex.resize(1000, 561)
    ex.setWindowTitle('Icon')
    ex.setWindowIcon(QIcon('im.png'))                          # <---- web.png
    ex.show()
    sys.exit(app.exec_())

введите сюда описание изображения

введите сюда описание изображения

boy33.png

введите сюда описание изображения


Update:

... мне нужно чтобы была возможность использовать новый задний фон, который у меня в картинках, при нажатии на кнопку, а в вашем примере он будет постоянный. ...

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, \
    QPushButton, QLabel, QVBoxLayout, QGridLayout
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt


class Program(QWidget):
    def __init__(self):
        super().__init__()
        self.setObjectName("mainwindow") 
        
        self.widget = QWidget(self)                                        # +++
        self.widget.setObjectName("widget")                                # +++

        self.button_create = QPushButton('button_create')
        self.button_create.setObjectName("button_create")
        
        self.button_settings = QPushButton('button_settings')
        self.button_settings.setObjectName("button_settings")
        
        self.button_about = QPushButton()
        self.button_about.setObjectName("button_about") 
        self.button_about.clicked.connect(self.about_program)

        self.label = QLabel("Hello World", alignment=Qt.AlignCenter)
        self.label.setObjectName("label")

        self.layout = QGridLayout(self.widget)                           # !!!
        self.layout.addWidget(self.label, 0, 0, 5, 5)
        self.layout.addWidget(self.button_create, 1, 5)
        self.layout.addWidget(self.button_settings, 3, 5)
        self.layout.addWidget(self.button_about, 6, 1, 1, 3)
        
        main_layout = QVBoxLayout(self)                                  # !!!
        main_layout.addWidget(self.widget)                               # !!!

    def about_program(self):
        self.label.setText(
            'В одном из приведённых ниже слов допущена ошибка в \nпост'
            'ановке ударения: НЕВЕРНО выделена буква, \nобозначающая '
            'ударный гласный звук. Выпишите это слово.')
            
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv      
        self.setStyleSheet('''
            #widget {
                border-image: url("opencv_color.jpg") 0 0 0 0;
            }
            #label {
                color: #fff;
            }
        ''') 
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


QSS = '''
#mainwindow {
    background-color: #a1193d;
}
#label {
    color: #f00;
    font-size: 24px;
}
#button_about {
    image: url(boy33.png);
    background-color: transparent;
    min-height: 10em;
}
#widget {
    border-image: url("boy33.png") 0 0 0 0;
}
'''
                

if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyleSheet(QSS)         
    ex = Program()
    ex.resize(1000, 561)
    ex.setWindowTitle('Icon')
    ex.setWindowIcon(QIcon('im.png')) 
    ex.show()
    sys.exit(app.exec_())

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка