[PySide] unexpected interaction when putting a QMainWindow inside a Qdialog

TP paratribulations at free.fr
Wed Jul 9 23:10:58 CEST 2014


Hi everybody,

Look at the following code.
Due to some external constraints, I am compelled to put a QMainWindow inside 
a QDialog. When I press "return" in the QLineEdit, all happens as if 
self.optimize_button is clicked, calling self.optimize().
The workaround I have found is to set this button invisible. But I would 
like to understand what happens. Is it a normal behavior?

Thanks in advance,

Julien


#####################################"
import sys
from PySide import QtCore, QtGui
from PySide.QtGui import *

class MainWindowEnterMakesPushButton( QMainWindow ):

    def __init__( self
            ):

        super( MainWindowEnterMakesPushButton, self ).__init__()

        q = QWidget()
        self.v = QVBoxLayout()
        q.setLayout( self.v )

        self.optimize_button = QPushButton(
                "optimization 1" )
        self.optimize_button.clicked.connect( self.optimize )
        #self.optimize_button.setVisible(False)
        self.optimize_button2 = QPushButton(
                "optimization 2" )
        self.optimize_button2.clicked.connect( self.optimize2 )

        self.v.addWidget( self.optimize_button )
        self.v.addWidget( self.optimize_button2 )

        self.max_pres_lineedit = QLineEdit()
        self.v.addWidget( self.max_pres_lineedit )

        self.dock_widget = QDockWidget()

        self.dock_widget.setWidget( q )

        self.addDockWidget( QtCore.Qt.LeftDockWidgetArea, self.dock_widget )


    def optimize( self ):

        print "optimization 1"

    def optimize2( self ):

        print "optimization 2"


class MainForm(QtGui.QDialog):

    def __init__(self, *args, **kwargs):

        super(MainForm, self).__init__(*args, **kwargs)
        self.l = QVBoxLayout()
        self.setLayout( self.l )

        self.main_window = MainWindowEnterMakesPushButton()

        self.l.addWidget( self.main_window )

app = QApplication( sys.argv )
dialog = MainForm( )
dialog.show()
app.exec_()




More information about the PySide mailing list