Помогите разобраться 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
→ Ссылка
У вас есть ДВА варианта:
- Когда объект
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()
- Добавить
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()