PyQt4: разница между QWidget и QMainWindow

Когда вы читаете учебник PyQt4, иногда в примерах используется QtGui.QMainWindow , иногда он использует QtGui.QWidget .

Вопрос: Как вы узнаете, когда использовать?

 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() 

Другой пример кода:

 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() 

QMainWindow – это класс, который понимает элементы GUI, такие как

  • панель инструментов,
  • статус бар,
  • центральный виджет,
  • стыковки.

QWidget – просто сырой виджет.

Когда вы хотите иметь главное окно для вашего проекта, используйте QMainWindow .

Если вы хотите создать диалоговое окно (модальное диалоговое окно), используйте QWidget или, более предпочтительно, QDialog .

Если вы не собираетесь использовать панель меню, панель инструментов или виджеты для доков, они для вас одинаковы. Если вы будете использовать один из них, используйте QMainWindow . И не забудьте вызвать setCentralWidget для вашего основного макета.