QMainWindow和QWidget


 

 一、QMainWindow

  QmainWindow主窗口為用戶提供一個應用程序框架,它有自己的布局,可以在布局中添加控件。在主窗口中可以添加控件,比如將工具欄、菜單欄、狀態欄等添加到布局管理器中。

  窗口類型介紹:QMainWindow、QWidget、QDialog三個類都可以用來創建窗口,可以直接使用,也可以繼承后使用。

  QMainWindow窗口包含菜單欄、工具欄、狀態欄、標題欄等,是最常見的窗口形式,也可以說是GUI程序的主窗口。

  QDialog是對話框窗口的基類。對話框主要用來執行短期任務,或者與用戶進行互動,它可以是模態的,也可以是非模態的。他沒有菜單欄、工具欄、狀態欄等。

  如果是主窗口,就使用QMainWindow類;

  如果是對話框,就使用QDialog類;

  如果不確定,有可能作為頂層窗口,也有可能嵌入到其他窗口,就使用QWidget類。

  QMainWindow類中比較重要的方法:

  

方法                                                            描述                                                         
addToolBar()

添加工具欄

centralWidget() 返回窗口中心的一個控件,未設置時返回None
menuBar() 返回主窗口的菜單欄
setCentralWidget() 設置窗口中心的控件
setstatusBar() 設置狀態欄
statusBar() 獲得狀態欄對象后,調用狀態欄對象的showMessage(message,int timeout = 0)方法,顯示狀態欄信息。第一個參數是要顯示的信息,第二個參數是信息停留的時間,單位是ms,默認值為0,表示一直顯示狀態欄信息。

QmainWindow有自己的布局,它不能再設置布局了

1、創建主窗口

 1 import sys
 2 from PyQt5.QtWidgets import QMainWindow, QApplication
 3 from PyQt5.QtGui import QIcon
 4 
 5 class MainWindow(QMainWindow):
 6     def __init__(self, parent = None):
 7         super(MainWindow, self).__init__(parent)
 8         self.resize(400, 200)
 9         self.status = self.statusBar()
10         self.status.showMessage('這是狀態欄顯示', 5000)
11         self.setWindowTitle('PyQt MainWindow例子')
12 
13 
14 if __name__ == '__main__':
15     app = QApplication(sys.argv)
16     app.setWindowIcon(QIcon(r'F:\火狐瀏覽器下載的文件\test.jpg'))
17     form = MainWindow()
18     form.show()
19     sys.exit(app.exec_())

 

結果:

注意這里狀態欄信息會顯示5秒(代碼里面設置了5秒)

2、主窗口居中顯示

 1 from PyQt5.QtWidgets import QDesktopWidget, QApplication, QMainWindow
 2 import sys
 3 
 4 class winform(QMainWindow):
 5     def __init__(self, parent = None):
 6         super(winform, self).__init__(parent)
 7         self.setWindowTitle('主窗口放在屏幕中間的例子')
 8         self.resize(400, 200)
 9         self.center()
10 
11     def center(self):
12         screen = QDesktopWidget().screenGeometry() #計算顯示屏的尺寸
13         size = self.geometry()          #計算qwidget的窗口大小
14         self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)  #把窗口移動到屏幕正中央
15 
16 if __name__ == '__main__':
17     app = QApplication(sys.argv)
18     win = winform()
19     win.show()
20     sys.exit(app.exit(app.exec_()))

 

結果:

在這里使用了QDeskWidget類用來顯示計算機顯示屏的一些參數信息。然后調用move函數將窗體移動到屏幕正中央。

3、關閉主窗口

 1 from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton, QHBoxLayout
 2 import sys
 3 
 4 class winform(QMainWindow):
 5     def __init__(self, parent = None):
 6         super(winform, self).__init__(parent)
 7         self.setWindowTitle('關閉主窗口例子')
 8         self.button1 = QPushButton('關閉主窗口1')
 9         # self.button2 = QPushButton('關閉主窗口2')
10         self.button1.clicked.connect(self.onButtonClick)  #綁定動作函數
11         # self.button2.clicked.connect(self.onButtonClick)  #綁定動作函數
12 
13         layout = QHBoxLayout()
14         layout.addWidget(self.button1)
15         # layout.addWidget(self.button2)
16 
17         main_frame = QWidget()
18         main_frame.setLayout(layout)
19         self.setCentralWidget(main_frame)
20 
21     def onButtonClick(self):
22         #sender是發送信號的對象,此處發送信號的對象是button1按鈕
23         sender = self.sender()
24         print(sender.text() + '被按下了')
25         qApp = QApplication.instance()
26         qApp.quit()
27 
28 if __name__ == '__main__':
29     app = QApplication(sys.argv)
30     form = winform()
31     form.show()
32     sys.exit(app.exec_())

 

 結果:

這里在主窗口上面添加了一個Button按鈕控件,並將其綁定到onButtonClick函數上面。當按下按鈕的時候,會調用onButtonClick函數,該函數里面又調用了quit函數。主窗口退出。

二、QWidget

  基礎窗口控件QWidget類是所有用戶界面對象的基類,所有窗口或者控件都直接或間接繼承自QWidget類。

1、QWidget不包含邊框的常用函數

  • 改變用戶區的面積:
    QWidget.resize(width, height)
    QWidget.resize(Qsize)
  • 獲得用戶區的大小:
    QWidget.size()

     

  • 獲得用戶區的寬度和高度:
    QWidget.width()
    QWidget.height()

     

 

  • 設置客戶區的高度、寬度、和面積(形成的窗體不可以使用鼠標來改變大小)
    QWidget.setFixedHeight()
    QWidget.setFixedWidth()
    QWidget.setFixedSize()

     

  • 設置客戶區的大小和位置:

    Qwidget.setGeometry(int x, int y, int width, int height)#位置和大小

 2、QWidget包含邊框的常用函數

  • 獲得窗體的大小和位置
    QWidget.frameGeometry()
  • 設置窗口的位置
    QWiget.move(int x, int y)

     

  • 獲得窗口左上角的的坐標
    QWidget.pos()

3、屏幕坐標系統顯示

 1 from PyQt5.QtWidgets import QWidget, QApplication, QPushButton
 2 import sys
 3 
 4 app = QApplication(sys.argv)
 5 widget = QWidget()
 6 btn = QPushButton(widget)
 7 btn.setText("Button")
 8 
 9 #以QWidget左上角為(0, 0)點
10 btn.move(20, 20)
11 
12 widget.resize(300, 200)     #設置窗口的大小
13 widget.move(250, 200)       #設置窗口的位置   以顯示屏作為標准
14 
15 widget.setWindowTitle('PyQt坐標系統例子')
16 widget.show()
17 print('QWidget:')
18 print('w.x() = %d'%widget.x())      #窗體的位置
19 print('w.y() = %d'%widget.y())
20 print('w.width() = %d'%widget.width())      #窗體的尺寸
21 print('w.height() = %d'%widget.height())
22 print('QWidget.geometry')
23 print('widget.geometry().x() = %d'%widget.geometry().x())       #窗體用戶區(即不包含邊框)的位置
24 print('widget.geometry().y() = %d'%widget.geometry().y())
25 print('widget.geometry().width() = %d'%widget.geometry().width())       #窗體用戶區(即不包含邊框)的位置
26 print('widget.geometry().height() = %d'%widget.geometry().height())
27 
28 sys.exit(app.exec_())

 

結果:

4、建立一個主窗口

 

import sys
from PyQt5.QtWidgets import QApplication, QWidget

app = QApplication(sys.argv)

window = QWidget()
window.resize(300, 200)
window.move(250, 150)
window.setWindowTitle('hello PyQT5')
window.show()

sys.exit(app.exec_())

 

 結果:

 

 5、設置程序圖標

 

 1 import sys
 2 from PyQt5.QtWidgets import QApplication, QWidget
 3 from PyQt5.QtGui import QIcon
 4 
 5 class Icon(QWidget):
 6     def __init__(self, parent = None):
 7         super(Icon, self).__init__(parent)
 8         self.initUI()
 9 
10     def initUI(self):
11         self.setGeometry(300, 300, 1250, 150)
12         self.setWindowTitle('程序圖標')
13         self.setWindowIcon(QIcon(r'F:\火狐瀏覽器下載的文件\test.jpg'))
14 
15 if __name__ == '__main__':
16     app = QApplication(sys.argv)
17     icon = Icon()
18     icon.show()
19     sys.exit(app.exec_())

 結果:

6、顯示氣泡提示信息

 1 import sys
 2 from PyQt5.QtWidgets import QApplication, QWidget, QToolTip
 3 from PyQt5.QtGui import QFont
 4 
 5 class winform(QWidget):
 6     def __init__(self):
 7         super().__init__()
 8         self.initUI()
 9 
10     def initUI(self):
11         QToolTip.setFont(QFont('SansSerif', 10))
12         self.setToolTip('這是一個<b>氣泡提示</b>')
13         self.setGeometry(200, 300, 400, 400)
14         self.setWindowTitle('氣泡提示demo')
15 
16 if __name__ == '__main__':
17     app = QApplication(sys.argv)
18     win = winform()
19     win.show()
20     sys.exit(app.exec_())

 

 結果:

當鼠標放置在窗體上時候,會出現該氣泡提示。

 


免責聲明!

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



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