how to set a text as a label when button is clicked?

anna picture anna · Apr 9, 2018 · Viewed 9.9k times · Source

I want to set text as label when button is clicked. self.labl.setText does work normally, but it doesn't work when it is in button function. I have read all the similar questions here, but still didn't solve the problem :(

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel
from PyQt5.QtCore import pyqtSlot

class App(QWidget):

    def __init__(self):
        super().__init__()
        self.title = 'title'
        self.left = 10
        self.top = 10
        self.width = 640
        self.height = 480
        self.initUI()


    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.labl = QLabel(self)
        self.labl.setText('abc')

        button = QPushButton('button', self)        
        button.move(170,300)
        button.clicked.connect(self.on_click)

        self.show()

    @pyqtSlot()
    def on_click(self):
        self.labl = QLabel(self)
        self.labl.setText('abc')


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

Answer

eyllanesc picture eyllanesc · Apr 9, 2018

The problem is simple, you are creating another QLabel, and that is not what you want, you just have to update the text.

@pyqtSlot()
def on_click(self):
    self.labl.setText('some text')
    self.labl.adjustSize()