[PyQt] Pressing enter in QLineEdit clicks QPushButton?

Mads Ipsen mpi at comxnet.dk
Mon Jun 22 22:24:38 BST 2009


Sibylle Koczian wrote:
> "Mads Ipsen" <mpi at comxnet.dk> schrieb:
>   
>> Sibylle Koczian wrote:
>>     
>>> Hello,
>>>
>>> I've got a dialog with a QLineEdit and a QPushButton. The QLineEdit is
>>> connected to a method which takes its text and appends it to a
>>> QTextBrowser (that's taken from the first GUI example in the PyQt book
>>> by M. Summerfield). The "clicked()" signal of the QPushButton is
>>> connected to a method that just prints a message. The problem: this
>>> method, which should only be called by clicking the button, is called
>>> every time Enter is pressed in the QLineEdit. This happens even if the
>>> edit control isn't connected to any method.
>>>
>>> The button is next to the line edit in the form and in the tab order.
>>>
>>> With "setAutoDefault(false)" for this button and for the exit button
>>> which follows in tab order I can prevent this behavior, but that isn't
>>> really very comfortable. And it shouldn't be necessary, should it?
>>>
>>> All this on openSUSE with Python 2.6, PyQt 4.4.4.
>>>
>>> Thank you for help,
>>> Sibylle
>>>
>>>   
>>>       
>> Can you supply a simple example that reproduces the behavior?
>>
>>     
>
> Here it is. Tried with PyQt 4.4.4 (openSUSE) and PyQt 4.5.1 (Windows XP
> Prof.), same behavior.
>
> If the returnPressed() signal of the line edit is connected to the
> logText() method, then pressing Enter calls logText() (as it should) and
> then logPush() (as it shouldn't), pressing Tab doesn't call either of
> them.
>
> If editingFinished() is connected to logText() instead (commented out
> here), then pressing Enter calls both methods, as before, pressing Tab
> only calls logText(), but clicking on one of the buttons (self.pushtest
> or btFertig) calls first logText() and then the method the button is
> connected to and should call.
>
> So in both cases the application doesn't do what I want it to do: put
> the line edit text into the text browser if and only if enter (or tab)
> is pressed after entering something in that control, and calling the
> method connected to the button if and only if the button is pressed. 
>
> What can I do, or what did I misunderstand?
>
> Regards
> Sibylle
>
>
> #!/usr/bin/env python
> # -*- coding: utf-8 -*-
> # test_lineeditenter.py
>
> import sys
> from PyQt4.QtCore import *
> from PyQt4.QtGui import *
>
> class Form(QDialog):
>     
>     def __init__(self, parent=None):
>         super(Form, self).__init__(parent)
>         self.lineedit = QLineEdit(u"Write something and press Enter")
>         self.pushtest = QPushButton(u"Test button")
>         self.log = QTextBrowser()
>         btFertig = QPushButton(u"E&xit")
>         layout = QVBoxLayout()
>         layout.addWidget(self.lineedit)
>         layout.addWidget(self.pushtest)
>         layout.addWidget(self.log)
>         layout.addWidget(btFertig)
>         self.setLayout(layout)
>         self.lineedit.selectAll()
>         self.lineedit.setFocus()
>         self.connect(self.lineedit, SIGNAL("returnPressed()"), 
>                      self.logText)
> #        self.connect(self.lineedit, SIGNAL("editingFinished()"), 
> #                     self.logText)
>         self.connect(self.pushtest, SIGNAL("clicked()"), self.logPush)
>         self.connect(btFertig, SIGNAL("clicked()"), self,
> SLOT("close()"))
>         self.setWindowTitle(u"Line edit problem")
>     
>     def logText(self):
>         tx = self.lineedit.text()
>         self.log.append(tx)
>         self.lineedit.selectAll()
>         self.lineedit.setFocus()
>     
>     def logPush(self):
>         self.log.append("Button pressed")
>
> if __name__ == "__main__":
>     app = QApplication(sys.argv)
>     mf = Form()
>     mf.show()
>     app.exec_()
>
>
>
>   
If you change 'QDialog' to 'QWidget' the problem disappears. But I have 
no idea why. Anybody?

Best regards,

Mads

-- 
+------------------------------------------------------------+
| Mads Ipsen, Ph.D, Scientific software developer            |
+------------------------------+-----------------------------+
| QuantumWise A/S              | phone:         +45-29716388 |
| Nørresøgade 27A              | www:    www.quantumwise.com |
| DK-1370 Copenhagen, Denmark  | email:  mpi at quantumwise.com | 
+------------------------------+-----------------------------+



More information about the PyQt mailing list