简体   繁体   中英

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM