2013-09-19 4 views
17

При чтении через учебник PyQt4 иногда примеры используют QtGui.QMainWindow, иногда он использует QtGui.QWidget.PyQt4: Разница между QWidget и QMainWindow

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

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

Возможный дубликат [В чем разница между QMainWindow, QWidget и QDialog?] (Http://stackoverflow.com/questions/3298792/whats-the-difference-between-qmainwindow-qwidget-and-qdialog) – nbro

ответ

15

QMainWindow это класс, который понимает элементы интерфейса, такие как панель инструментов

  • ,
  • статусной,
  • центральный виджет,
  • docki нг.

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

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

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

4

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

Смежные вопросы