Помогите разобраться c PyQt, пожалуйста

Если запускать функцию button_clicked() напрямую из __init__, то в окне создастся лейбл, но если ту же функцию запустить с кнопки (b1.clicked.connect)- ничего не создаётся.

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys


class MyWindow(QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()

        self.b1 = QtWidgets.QPushButton(self)
        self.b1.setText("click me!")
        self.button_clicked()  # запускаем напрямую
        # self.b1.clicked.connect(self.button_clicked)  # запускаем через кнопку

    def button_clicked(self):
        self.label = QtWidgets.QLabel(self)
        self.label.move(30, 30)
        self.label.setText("TEST")


def window():
    app = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    sys.exit(app.exec_())


window()

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

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

У вас есть ДВА варианта:

  1. Когда объект self.label создается при инициализации

import sys
from PyQt5.Qt import *

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow


class MyWindow(QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()

        self.b1 = QtWidgets.QPushButton(self)
        self.b1.setText("click me!")
#        self.button_clicked()  # запускаем напрямую
        self.b1.clicked.connect(self.button_clicked)  # запускаем через кнопку
        
        self.label = QtWidgets.QLabel(self)
        self.label.move(30, 30)

    def button_clicked(self):
#        self.label = QtWidgets.QLabel(self)
#        self.label.move(30, 30)
        self.label.setText("TEST")

def window():
    app = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    window()
  1. Добавить self.label.show()

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow


class MyWindow(QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()

        self.b1 = QtWidgets.QPushButton(self)
        self.b1.setText("click me!")
#        self.button_clicked()  # запускаем напрямую
        self.b1.clicked.connect(self.button_clicked)  # запускаем через кнопку

    def button_clicked(self):
        self.label = QtWidgets.QLabel(self)
        self.label.move(30, 30)
        self.label.setText("TEST")
        self.label.show()


def window():
    app = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    window()
→ Ссылка