[PyQt] File Dialog Opens Twice

David Arnold dwarnold45 at suddenlink.net
Sat Feb 13 20:02:18 GMT 2010

David, Detlev,

OK, I am gonna guess that this line in setupUi is what you are both referring to:


Here is what I was thinking:

        QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL("clicked()"), Notepad.close)

I thought the first line took care of my close button, so I would have to take care of the open button in my file.

The following archive makes it even more confusing for me:


In test.py (generated from edytor.ui with pyuic4 edytor.ui>test.py) I have the same connections in setupUi:

        QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL("clicked()"), Notepad.close)

Yet in my test_start.py, I write:

        # here we connect signals with our slots
    def file_dialog(self):
        fd = QtGui.QFileDialog(self)
        plik = open(fd.getOpenFileName()).read()

And I don't get the double open problem when I run test_start.py.

I don't understand the difference.

Can you explain?


On Feb 12, 2010, at 8:13 PM, David Boddie wrote:

> On Sat Feb 13 02:07:44 GMT 2010, David Arnold wrote:
> [...]
>> class Notepad(QMainWindow, Ui_Notepad):
>>  def __init__(self, parent = None):
>>      QMainWindow.__init__(self, parent)
>>      self.setupUi(self)
> ^^^ Connection 1 (behind the scenes)
>>      self.connect(self.button_open,
>>                             SIGNAL("clicked()"), 
>>                             self.on_button_open_clicked)
> ^^^ Connection 2
>>  @pyqtSignature("")
>>  def on_button_open_clicked(self):
>>      fd=QFileDialog(self)
>>      plik=open(fd.getOpenFileName()).read()
>>      self.editor_window.setText(plik)
>> However, when I run the project and click on the Open button, the file
>> dialog opens, I select start.py in the SimpleTextEditor folder, press OK
>> and it opens fine in the QTextEdit window. However, then the QFileDialog
>> opens a second time. Weird.
>> Can anyone explain what I am doing wrong?
> You called setupUi(self) which connects all the signals to specially-named
> slots like the one you defined (on_button_open_clicked) and decorated with
> @pyqtSignature. Then you explicitly connected the push button's signal to
> the slot again.
> So, when the button is pressed, the slot will be invoked twice and the
> dialog will be opened twice.
> David
> _______________________________________________
> PyQt mailing list    PyQt at riverbankcomputing.com
> http://www.riverbankcomputing.com/mailman/listinfo/pyqt

More information about the PyQt mailing list