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_())

QWidget提供以下函數用於定位窗口坐標:(客戶區,不包含邊框的部分即客戶區,我們正常操作的地方)

① x(),y()獲得窗口左上角坐標,width(),height()獲取客戶區的寬度和高度;

②geometry()提供的成員函數,x() y()獲得客戶區左上角的坐標,width(),height()獲得客戶區的寬度和高度;

③frameGeometry()提供x(),y()獲得窗口左上角坐標,width(),height()獲得包含客戶區,標題欄和邊框在內的整個窗口的寬度和高度;

QWidge改變大小和位置常用函數(不包括邊框):

①改變客戶區面積

QWidget.resize(width,height) 或QWidget.resize(QSize)

注:QSize是PyQt5.QtCore中的類,該類代表一個矩形區域大小;

QWidget.resize(200,300)

QWidget.resize(QSize(200,300))

②獲取客戶區的寬度和高度

QWidget.width()

QWidget.height()

③獲取客戶區的大小

Qwidget.size()

④設置不可改高度或高度

QWidget.setFixedWidth(int width)# 寬度固定,高度可修改拉伸

QWidget.setFixedHeight(int height)#高度固定,寬度可修改拉伸

QWidget.setFixedSize(QSize size)#寬高固定

QWidget.setFixedSize(int widht,int height)#寬高固定

QWidget包含邊框設置的函數

以下設置包含邊框,包含大小和位置控制,是窗口在屏幕上顯示的整個區域大小和位置;

①獲取窗口的大小

QWidget.frameGeometry()

②設置窗口的位置

QWidget.move(int x,int y)

QWidget.move(Qpoint point)

③獲取窗口左上角坐標

QWidget.pos()

Demo:

 1 from PyQt5.QtWidgets import  QApplication,QMainWindow,QPushButton,QWidget
 2 import sys
 3 app=QApplication(sys.argv)
 4 widget=QWidget()
 5 btn=QPushButton(widget)
 6 btn.setText("BTN")
 7 widget.resize(300,400)#設置客戶區大小
 8 widget.move(100,50)#設置客戶區左上角坐標位置
 9 widget.setWindowTitle("PyQt坐標")
10 widget.show()
11 #打印數據
12 print("QWidget用戶區坐標:x=%d,y=%d" %(widget.geometry().x(),widget.geometry().y()))#109,86
13 print("QWidget窗口坐標:x=%d ,y=%d" %(widget.x(), widget.y()))#100,50
14 print("QWidget窗口坐標:x=%d,y=%d" %(widget.frameGeometry().x(),widget.frameGeometry().y()))#100,50
15 print("QWidget客戶區寬和高:width=%d,height=%d" %(widget.width(),widget.height()))#300,400
16 print("QWidget窗口寬和高:width=%d,height=%d" %(widget.frameGeometry().width(),widget.frameGeometry().height()))#318,445
17 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_())

 

 

 

總結:

1、app=QApplication(sys.argv)

每一個PyQt5程序都需要有一個QApplication對象,該類包含在QTWidgets模塊中; sys.argv是一個命令行參數來列表;Python腳本可以從Shell中執行,例如雙擊.py文件,通過參數來選擇啟動腳本方式;

2、widget=QWidget() QWidget是PyQt5中所有用戶界面類的父類。這里使用沒有參數的構造方法,他沒有繼承其他類,我們將沒有父類的QWidget 控件也叫窗口;窗口和控件都繼承自QWidget類;如果不為控件指定父對象,則該控件會被當做一個窗口處理;

3、window.show()將窗口控件顯示在屏幕上。window.setWindowTitle("窗口標題"),設置窗口標題;

sys.exit(app.exec_())調用該exit()方法程序的主循環會被結束,確保程序完整的結束;執行成功,exec()返回為0,否則為非0;

(c、c++從main函數返回結果都相當於使用了exit函數,main返回值會傳遞給exit方法的參數,PyQt5底層實現使用c++,因此exec()執行完畢后返回值為0;exec()是PyQt4中方法,為了解決Python2中exec關鍵詞沖突,PyQt5中使用了exec_()方法名)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM