PyQt5基本視窗控制元件之QMainWindow
阿新 • • 發佈:2018-12-12
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_())