Подтвердить что ты не робот

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

Ответ 1

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

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

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

Если у вас есть основное окно для проекта, используйте QMainWindow.

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

Ответ 2

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