Max
Max

Reputation: 2162

PyQt5 connect Enter key to Widget

Currently I am working with my own custom widget that consists of a QLineEdit and a QPushButton. A user is limited to entering an integer between 0 and 1000 in the text field. Upon clicking the button, the widget's custom clicked signal emits the value in the field.

Here is the code:

class ResizeWidget(QWidget):

    clicked = pyqtSignal(int)

    def __init__(self):
        super().__init__()

        #NumField and Button
        self.field = QLineEdit()
        self.field.setPlaceholderText("Resize Percentage [0,1000]")
        self.resizeButton = QPushButton("Resize")

        #Layout
        self.lay = QHBoxLayout()
        self.setLayout(self.lay)

        #Add to Widget
        self.lay.addWidget(self.field)
        self.lay.addWidget(self.resizeButton)

        #Field limits
        self.field.setMaxLength(4)
        self.field.setValidator(QIntValidator(0,1000))

        #Connection
        self.resizeButton.clicked.connect(self.onClick)

    @pyqtSlot()
    def onClick(self):
        val = int(self.field.text())
        self.clicked.emit(val)

Now what I'd like to add to the class is some way of allowing the user to press enter when the blinking cursor | sometimes called a 'caret' is in the text field.

I am able to find documentation on the mouse in general, mouseEvent and mousePressEvent as a method within QWidgets. But I can't find any documentation that refers to the blinking cursor within the text field.

I would like to add some sort of pseudocode like this within init():

if(cursor == inQLineEdit and pressedEnter):
    self.onClick()

I know QLineEdit::returnPressed plays a major role in creating the correct function but I only want the enter key to be valid if the user is using the ResizeWidget. Not some other part of my GUI. I would think the enter key isn't binded to only 1 widget in my entire application but I'd be interested to find out.

Upvotes: 4

Views: 12323

Answers (1)

Max
Max

Reputation: 2162

It was as simple as adding the following line:

self.field.returnPressed.connect(self.onClick)

As long as the caret (blinking cursor) isn't in the text field, pressing the Enter key doesn't cause any reaction from my custom widget.

Upvotes: 14

Related Questions