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()
Ответы
Ответ 1
QMainWindow
- это класс, который понимает элементы GUI, такие как
- панель инструментов,
- statusbar,
- центральный виджет,
- зоны стыковки.
QWidget
- просто сырой виджет.
Если у вас есть основное окно для проекта, используйте QMainWindow
.
Если вы хотите создать диалоговое окно (модальное диалоговое окно), используйте QWidget
или, более предпочтительно, QDialog
.
Ответ 2
Если вы не собираетесь использовать панель меню, панель инструментов или виджеты док-станции, они для вас одинаковы.
Если вы используете один из них, используйте QMainWindow
. И не забудьте вызвать setCentralWidget
в свой основной виджет макета.