Thanks to the high level interface of PyQt4 this requires only a small modification of the resizeEvent function of QWidget (see code below).
from PyQt4 import QtGui, QtCore
import sys
class QuitButton(QtGui.QPushButton):
def __init__(self, parent, text="Quit"):
QtGui.QPushButton.__init__(self, text, parent)
parent.connect(self, QtCore.SIGNAL('clicked()'),
QtGui.qApp, QtCore.SLOT('quit()'))
self.resize(self.sizeHint().width(),
self.sizeHint().height())
class WidgetWithQuit(QtGui.QWidget):
"""QWidget that has a QuitButton at the bottom right;
margin specified in the constructor"""
def __init__(self, parent=None, buttontext="Quit", margin=10):
self.margin = margin
QtGui.QWidget.__init__(self, parent)
self.quit_button = QuitButton(self, text=buttontext)
self.align_button()
def align_button(self):
widget_geometry = self.geometry()
button_geometry = self.quit_button.geometry()
width_offset = widget_geometry.width() - (button_geometry.width() + self.margin)
height_offset = widget_geometry.height() - (button_geometry.height() + self.margin)
self.quit_button.move(width_offset, height_offset)
def resizeEvent(self, event):
QtGui.QWidget.resizeEvent(self, event)
self.align_button()
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
widget = WidgetWithQuit()
widget.setGeometry(300, 300, 100, 100)
widget.quit_button.setToolTip('Quit on left mouse click')
widget.show()
sys.exit(app.exec_())
Of course this is just a very simple, "academic" example; still it should be clear that PyQt4 offers an easy to use interface to build user-friendly GUI applications.
Thanks to C/C++ binding generators such as boost python you can still rely on fast C/C++ for the underlying algorithms which gives you the best of both worlds: easy implementation of the GUI using a high level language and fast algorithms working on (big) data in the background.
For the documentation of the classes used above, see:
No comments:
Post a Comment