19

When reading through a PyQt4 tutorial, sometimes the examples uses QtGui.QMainWindow, sometimes it uses QtGui.QWidget.

Question: How do you tell when to use which?

import sys
from PyQt4 import QtGui


class Example(QtGui.QMainWindow):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):               

        self.statusBar().showMessage('Ready')

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Statusbar')    
        self.show()


def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

Another code example:

import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):      

        cb = QtGui.QCheckBox('Show title', self)
        cb.move(20, 20)
        cb.toggle()
        cb.stateChanged.connect(self.changeTitle)

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('QtGui.QCheckBox')
        self.show()

    def changeTitle(self, state):

        if state == QtCore.Qt.Checked:
            self.setWindowTitle('QtGui.QCheckBox')
        else:
            self.setWindowTitle('')

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()
Nyxynyx
  • 61,411
  • 155
  • 482
  • 830
  • possible duplicate of [What's the difference between QMainWindow, QWidget and QDialog?](http://stackoverflow.com/questions/3298792/whats-the-difference-between-qmainwindow-qwidget-and-qdialog) – nbro Jun 30 '15 at 01:35

2 Answers2

20

QMainWindow is a class that understands GUI elements like a

  • toolbar,
  • statusbar,
  • central widget,
  • docking areas.

QWidget is just a raw widget.

When you want to have a main window for you project, use QMainWindow.

If you want to create a dialog box (modal dialog), use QWidget, or, more preferably, QDialog.

nbro
  • 15,395
  • 32
  • 113
  • 196
antonone
  • 2,045
  • 1
  • 25
  • 35
5

If you are not going to use a menu bar, tool bar or dock widgets, they are the same to you. If you will use one of those, use QMainWindow. And don't forget to call setCentralWidget to your main layout widget.

MadeOfAir
  • 2,933
  • 5
  • 31
  • 39