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

PyQt5基本視窗控制元件之QMainWindow

QMainWindow

QMainWindow主視窗為使用者提供一個應用程式框架,它有自己的佈局,可以在佈局中新增控制元件。在主視窗中可以新增控制元件,比如將工具欄、選單欄和狀態列等新增到佈局管理器中。

一、視窗型別介紹

1、QMainWindow視窗

QMainWindow視窗可以包含選單欄、工具欄、狀態列、標題欄,是GUI程式的主視窗,主視窗就使用QMainWindow類

2、QDialog視窗

QDialog視窗是對話方塊視窗的基類。對話方塊主要用來執行短期任務,或者與使用者進行互動,它可以是模態的,也可以是非模態的。QDialog視窗沒有選單欄、工具欄、狀態列等。對話方塊就使用QDialog類

3、QWidget視窗

QWidget視窗是不確定QMainWindow類還是QDialog類時使用,或者有可能作為頂層視窗,也有可能嵌入到其他視窗中,就使用QWidget類

二、QMainWindow類中比較重要的方法

方法  描述
addToolBar()  新增工具欄
centralWidget()  返回視窗中心的一個控制元件,未設定時返回NULL
menuBar()  返回主視窗的選單欄
setCentralWidget()  設定視窗中心的控制元件
setStatusBar()  設定狀態列
statusBar()  獲得狀態列物件後,呼叫狀態列物件的showMessage(message,int timeout=0)方法,顯示狀態列資訊。其中第一個引數是要顯示的狀態列資訊;第二個引數是資訊停留的時間,單位是毫秒,預設是0,表示一直顯示狀態列資訊

三、QMainWindow相關使用例項

例:1:建立主視窗(先使用Qt Designer生成.ui檔案)

import sys
from PyQt5.QtWidgets import QMainWindow,QApplication

'''
主視窗程式碼:
1、建立主視窗並設定主視窗標題
2、建立狀態列
3、狀態列顯示資訊5s
'''

class MainWindow(QMainWindow):
    def __init__(self,parent=None):
        super().__init__(parent)
        # 主視窗大小
        self.resize(400,200)
        # 狀態列
        self.status=self.statusBar()
        #狀態列顯示資訊,5000為顯示5000ms後消失
        self.status.showMessage("這是狀態列提示",5000)
        #設定視窗標題
        self.setWindowTitle("PyQt MainWindow 例子")

if __name__=="__main__":
    app=QApplication(sys.argv)
    myMainWin=MainWindow()
    myMainWin.show()
    sys.exit(app.exec_())

例2:將主視窗放在螢幕中間(先使用Qt Designer生成.ui檔案)

import sys
from PyQt5.QtWidgets import QDesktopWidget,QApplication,QMainWindow

'''
建立主視窗:主視窗居中顯示
'''

class MainWin(QMainWindow):
    def __init__(self,parent=None):
        super().__init__(parent)
        #主視窗設定
        self.setWindowTitle('主視窗放在螢幕中間例子')
        self.resize(370,250)
        self.center()   #居中設定

    def center(self):
        '''主視窗居中設定封裝函式'''
        #計算螢幕長和寬
        screen=QDesktopWidget().screenGeometry()
        #gui介面長和寬
        size=self.geometry()
        #計算中點並移動
        self.move((screen.width()-size.width())/2,(screen.height()-size.height())/2)

if __name__=="__main__":
    app=QApplication(sys.argv)
    myMainWin=MainWin()
    myMainWin.show()
    sys.exit(app.exec_())

例3:關閉主視窗(先使用Qt Designer生成.ui檔案)

import sys
from PyQt5.QtWidgets import QMainWindow,QHBoxLayout,QPushButton,QApplication,QWidget

'''
主視窗:關閉主視窗
'''

class MainWin(QMainWindow):
    def __init__(self,parent=None):
        super().__init__(parent)
        #標題設定
        self.setWindowTitle('關閉主視窗例子')
        #按鈕
        self.button1=QPushButton('關閉主視窗')
        self.button1.clicked.connect(self.onButtonClick)
        #佈局--水平佈局
        layout=QHBoxLayout()
        layout.addWidget(self.button1)
        #視窗中心控制元件
        main_frame=QWidget()
        main_frame.setLayout(layout)
        self.setCentralWidget(main_frame)

    def onButtonClick(self):
        '''按鈕槽函式封裝'''
        #獲取訊號傳送物件
        sender=self.sender()
        #列印訊號傳送物件的文字+列印輸出
        print(sender.text()+'被按下了')
        #建立QApplication物件並呼叫quit方法
        qApp=QApplication.instance()
        qApp.quit()

if __name__=="__main__":
    app=QApplication(sys.argv)
    myMainWin=MainWin()
    myMainWin.show()
    sys.exit(app.exec_())