To achieve this, you'll have to change the default code, both in the
.ui and in the main python file. Basically, you have to use signals to catch the
click event on your OK button.
First thing first: in your
XX_dialog_base.ui file, replace the
QDialogButtonBox object (which contains the "OK" and "Cancel" buttons) with 2 simple
QPushButton objects. Let's say that the "OK" Push Button is called
runButton (in QT Designer, you can set the name of an object in the right panel).
Then, the main work: in your main
.py file, you have to import
from PyQt4.QtCore import pyqtSignal, pyqtSlot). To display a message box, you also have to import
from PyQt4.QtGui import QMessageBox).
run method should simply look like this:
"""Run method that performs all the real work"""
# add some code to preset the GUI if needed
# show the dialog
# Run the dialog event loop
At the beginning of the
__init__ method, add the following line:
super(XXX, self).__init__() (don't ask me why, it just won't work otherwise). Replace
XXX with the name of your class (which is usually the name of your plugin).
initGui method, add (wherever) the following line:
self.dlg.runButton.clicked.connect( self.onStart ). This will connect the "clicked on runButton" event to the
onStart method, which will look like this (you can write it wherever you want):
# here you can do whatever you want before running the main code
# for example, display a message under some condition:
messageBox = QMessageBox()
messageBox.setWindowTitle( "Title" )
messageBox.setText( "Content" )
messageBox.setIcon( QMessageBox.Critical )
self.dlg.runButton.setEnabled(False) # Disable OK button
self.dlg.closeButton.setEnabled(False) # Disable cancel button
self.main() # Run main function
You may need to add some changes to what I wrote, but this should cover most of what you want. Note that with this approach (events and signals), you can event control the options before the user clicks on OK (no need for warning messages).