1. 程式人生 > >PyQt5-基本視窗控制元件-QMainWindow

PyQt5-基本視窗控制元件-QMainWindow

一、QMainWindow

QMainWIndow是用 戶提供一個應用程式框架,他有自己的佈局,可以在佈局中新增控制元件。在主視窗下新增控制元件,例如:工具欄,選單欄,狀態列等;

QDialog是對話方塊視窗的基類;對話方塊主要用於執行短期任務,或者與使用者進行互動;QDialog沒有選單欄,工具欄,狀態列等;

1.1建立主視窗:

常用方法如下:注意,QMainWindow不可以通過setLayout設定佈局,因為他有自己的佈局;

 Demo:

 1 #建立一個主視窗
 2 import sys
 3 from PyQt5.QtWidgets import  QMainWindow,QApplication,QDesktopWidget,QPushButton
4 5 class MainWindow(QMainWindow): 6 def __init__(self,parent=None): 7 super(MainWindow,self).__init__(parent) 8 self.resize(200,300)#設定大小 9 self.status=self.statusBar() #建立狀態列 10 self.setWindowTitle('窗體標題!')#窗體標題 11 self.status.showMessage("狀態列",5000)#狀態列訊息以及有效時間
12 self.center()#設定佈局 13 def center(self): 14 deskSize=QDesktopWidget().screenGeometry()#獲取桌面窗體引數 15 windowSize=self.geometry()#獲取窗體本身引數 16 self.move((deskSize.width()-windowSize.width())/2,(deskSize.height()-windowSize.height())/2)#居中設定 17 if __name__=="__main__":
18 app=QApplication(sys.argv) 19 window=MainWindow() 20 window.show() 21 sys.exit(app.exec_())

1.2 connection方法,講槽函式關聯起來;實現點選“”關閉視窗“”按鈕,實現關閉顯示的視窗;槽函式onBtnClickCloseWin如下,該方法中獲取到QApplication類的物件,呼叫該物件的quit()方法來關閉視窗,在槽函式中可以獲得傳送訊號的物件,下面程式中傳送訊號的物件是關閉按鈕。

Demo:

 1 #關閉一個主視窗
 2 import sys
 3 from PyQt5.QtWidgets import  QMainWindow,QApplication,QPushButton,QHBoxLayout,QWidget,QDesktopWidget
 4 
 5 
 6 class MainWindow(QMainWindow):
 7     def __init__(self,parent=None):
 8         super(MainWindow, self).__init__(parent)
 9         #窗體設定
10         self.resize(200,300)
11         self.setWindowTitle("關閉視窗")
12         self.center()
13         
14         #按鈕設定
15         self.btn = QPushButton("關閉")
16         self.btn.clicked.connect(self.onBtnClickCloseWin)#單擊事件
17         
18         #佈局
19         layout = QHBoxLayout()
20         layout.addWidget(self.btn)
21         widGet=QWidget()
22         widGet.setLayout(layout)
23         self.setCentralWidget(widGet)
24         
25     #窗體居中
26     def center(self):
27         self.size=QDesktopWidget().screenGeometry()
28         self.resize=self.geometry()
29         self.move((self.size.width()-self.resize.width())/2,(self.size.height()-self.resize.height())/2)
30 
31     def onBtnClickCloseWin(self):
32         #傳送訊息物件
33         sender=self.sender()
34         appInstance=QApplication.instance()
35         appInstance.quit()
36 
37 if __name__=="__main__":
38     app=QApplication(sys.argv)
39     mainWindow=MainWindow()
40     mainWindow.show()
41     sys.exit(app.exec_())