Sunday, January 22, 2012

Qt Tutorial #1-4 Let there be widgets

This is from Qt Tutorial #1-4 Let there be widgets


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

'''
    PyQt4 conversion of Qt Tutorial 4
    Create a custom widget.
    
    The original code uses an init() signature of 
        MyWidget::MyWidget( QWidget *parent, const char *name )
    The 'name' parameter is not part of the PyQt4 QWidget __init__() signature
    If used, as shown here, do not pass it on to the base class.
    
    The parameter is useful for identifying the widget in CSS style sheets
    i.e. QWidget#myWidget{ color: blue; }
    
    Note: QWidget appears to have a default QLayout manager that uses
          absolute positioning based on the window's top-left corner
          For example if you add the following to init()
              btn = QPushButton('Button', self)
              btn1 = QPushButton('Button 1', self)
          both buttons will be added to the top-left (0,0) corner
          with 'btn1' being positioned over 'btn'
          
          Set the geometry on either button to reposition it.
        
last modified: 2012-01-19 jg
ref: 
    http://doc.trolltech.com/3.3/tutorial1-04.html
    http://riverbankcomputing.co.uk/static/Docs/PyQt4/html/qwidget.html
'''

import sys
from PyQt4.QtGui import (QApplication, QWidget, QPushButton, QFont)

class MyWidget(QWidget):    # MyWidget subclasses QWidget
    def __init__(self, parent=None, name=''):
        super(MyWidget, self).__init__(parent)  # initialise base (QWidget) class
        if name:
            self.setObjectName(name)

        self.setMinimumSize(200, 120)
        self.setMaximumSize(200, 120)

        quitBtn = QPushButton('Quit', self)
        quitBtn.setGeometry(62, 40, 75, 30)    # position the button in the window
        quitBtn.setFont(QFont("Times", 18, QFont.Bold))

        # Note: the 'QApplication.instance()' returns the
        # QApplication 'instance object' whose 'quit' method is invoked
        quitBtn.clicked.connect(QApplication.instance().quit)

        # test default layout behaviour
        btn = QPushButton('Button', self)
        btn1 = QPushButton('Button 1', self)
        btn1.setGeometry(50, 10, 50, 30)    # x, y, width, height

def main():
    app = QApplication(sys.argv)    # required

    w = MyWidget(name='myWidget')
    w.setGeometry(100, 100, 200, 120)
    w.show()
    sys.exit(app.exec_())   # start main event loop, exit when app closed


if __name__ == '__main__':
    main()