QMainWindow
QMain Window主窗口為用戶提供一個應(yīng)用程序框架,它有自己的布局,可以在布局中添加控件。在主窗口中可以添加控件,比如將工具欄、菜單欄和狀態(tài)欄等添加到布局管理器中。
1、窗口類型的介紹:
QMainWindow、QWidget和 QDialog三個類都是用來創(chuàng)建窗口的,可以直接使用,也可以繼承后再使用。
Main Window窗口可以包含菜單欄、工具欄、狀態(tài)欄、標(biāo)題欄等,是最常見的窗口形式,也可以說是GUI程序的主窗口。
QDialog是對話框窗口的基類。對話框主要用來執(zhí)行短期任務(wù),或者與用戶進(jìn)行互動,它可以是模態(tài)的,也可以是非模態(tài)的。QDialog窗口沒有菜單欄、工具欄、狀態(tài)欄等。
如果是主窗口,就使用QMainWindow類;如果是對話框,就使用QDialog類;如果不確定,或者有可能作為頂層窗口,也有可能嵌入到其他窗口中,那么就使用owidget類。
本節(jié)只介紹QMainWindow類,關(guān)于QWidget類與QDialog類的更詳細(xì)用法會在后續(xù)章節(jié)中進(jìn)行介紹,讀者只需要對它們有簡單的了解就行。這些內(nèi)容都非常簡單,并不需要進(jìn)行太深入的研究。
2、創(chuàng)建主窗口
如果一個窗口包含一個或多個窗口,那么這個窗口就是父窗口,被包含的窗口則是子窗口。沒有父窗口的窗口是頂層窗口,QMainWindow就是一個頂層窗口,它可以包含很多界面元素,如菜單欄、工具欄、狀態(tài)欄、子窗口等。
在PyQt中,在主窗口(QMainWindow)中會有一個控件(QWidget)占位符來占著中心窗口,可以使用setCentralWidget()來設(shè)置中心窗口。
QMainWindow繼承自QWidget類,擁有它的所有派生方法和屬性。
QMain Window類中比較重要的方法如下所示。

注意:QMain Window不能設(shè)置布局(使用setLayout()方法),因為它有自己的布局。
實例演示1:創(chuàng)建主窗口
運行程序,顯示效果如下:

代碼分析:
使用QMainWindow類的statusBar()方法創(chuàng)建狀態(tài)欄,然后使用showMessage()方法將提示信息顯示在狀態(tài)欄中,提示信息的顯示時間是5秒,5秒后狀態(tài)欄提示信息消失。
在自定義的窗口類 MainWindow中,繼承了主窗口QMainWindow類所有的屬性和方法,然后使用父類QMainWindow 的構(gòu)造函數(shù)super()初始化窗口,再設(shè)置窗口標(biāo)題,最后通過消息循環(huán)顯示窗口,狀態(tài)欄可以直接由 statusBar()產(chǎn)生,由showMessage()來顯示信息。
實例演示2:將主窗口放在屏幕中間
QMainWindow利用QDesktopWidget類來實現(xiàn)主窗口居中顯示。在主窗口初始化后,將它放在屏幕中間。其完整代碼如下:
運行代碼,顯示效果如下:

代碼分析:
該行語句用來設(shè)置QWidget 窗口的大小,寬度為370像素,高度為250像素。
該行語句用來計算顯示屏幕的大小:(screen.width()*screen.height()),其中QDesktop Widget是描述顯示屏幕的類,通過QDesktopWidget().screenGeometry()來獲得屏幕的大小。
該行語句用來獲取QWidget窗口的大小:(size.width()*size.heiget()).
該行語句將窗口移動到屏幕中間。
實例演示3:關(guān)閉主窗口
演示關(guān)閉主窗口,其完整代碼如下:
運行程序,顯示效果如下:

代碼分析:
當(dāng)單擊“關(guān)閉主窗口”按鈕后,將關(guān)閉顯示的窗口,通過以下代碼將按鈕的clicked信號與onButtonClick槽函數(shù)關(guān)聯(lián)起來。
在槽函數(shù)onButtonClick()里獲得QApplication類的對象,調(diào)用它的quit()函數(shù)來關(guān)閉窗口,在槽函數(shù)里還可以獲得發(fā)送信號的對象,在本例中發(fā)送信號對象是名字為“關(guān)閉主窗口”的按鈕控件,然后就可以通過按鈕的text()函數(shù)獲得按鈕的顯示名稱。