Search code examples
pythonpyqtpyqt5qt-designerqtextedit

PyQt5 emit clicked signal on Qtextedit


My qtextedit field has some predefined text in it. I would like to make it disappear as soon as it is clicked. So im trying to create a "clicked" signal for it. Here is what i have (just important lines:

from PyQt5.QtCore import pyqtSignal
from PyQt5 import QtCore, QtGui, QtWidgets

(...)

class QTextEdit(QtWidgets.QTextEdit):
    clicked = pyqtSignal()
    def mouseReleaseEvent(self,event):
        self.clicked.emit()

(...)

    self.userfield = QtWidgets.QTextEdit(self.centralwidget)
    self.userfield.setMaximumSize(QtCore.QSize(200, 30))
    self.userfield.setObjectName("userfield")
    self.userfield.clicked.connect(lambda: self.txt())

I get AttributeError: 'QTextEdit' object has no attribute 'clicked'

I can provide the rest of the code, but it is just an unfunctional ui for now.


Solution

  • You should not call a class equal to another existing class, that can cause you conflicts and therefore many problems.

    Apart from that in the following code:

    self.userfield = QtWidgets.QTextEdit(self.centralwidget)
    

    You are telling them to use the QTextEdit from QtWidgets module and not your class.

    Solution:

    # ...
    class TextEdit(QtWidgets.QTextEdit):
        clicked = pyqtSignal()
        def mouseReleaseEvent(self,event):
            self.clicked.emit()
    # ...
        self.userfield = TextEdit(self.centralwidget)
        self.userfield.setMaximumSize(QtCore.QSize(200, 30))
        self.userfield.setObjectName("userfield")
        self.userfield.clicked.connect(self.txt)
        # ...