二、PyQt5基本功能和操作入門


在這里,我將根據自己的學習歷程從初級到高級介紹pyqt5。因為是學到哪里就寫道哪里,所以內容排版比較隨意。有兩點問題需要先說明:

1.雖然界面的設計可以借助qt designer進行拖拽創建,並且可以大大簡化操作,提高效率。但個人感覺對於初學者來說,先理解pyqt5的各函數和方法,對加深理解大有幫助。

2.pyqt5的使用應該堅持界面於邏輯分離的原則。本節因為是基礎介紹,暫未將界面於邏輯分離,后續內容會涉及。

一、基本窗口

在這里,我們先通過一個小例子對pyqt5有意個初步的認知。

import sys,time
from PyQt5.QtWidgets import QApplication,QWidget
#這里導入了PyQt5.QtWidgets模塊,里面包含了基本的組件

if __name__=="__main__":
    app = QApplication(sys.argv)
    win = QWidget()
    win.resize(500,400) #窗口寬500px,高400px
    #win.show()
    #time.sleep(3)
    win.move(500,500) #將窗口移動到屏幕上(500,500)處
    win.setWindowTitle("hello world")
    win.show()
pyqt5小例子

注:

  • 退出時app.exec_() 之所以在exec后加了一個下划線,是因為exec時pyth的關鍵字。
  • 這個例子中引入了time模塊是為了體現出窗口位置的變化過程(已注釋掉)。

      通過上面這個小例子,我們已經了解了pyqt5的基本功能,了解設置窗口大小,位置以及標題和窗口顯示的基本操作。

顯示效果如下

 

二、添加小控件

上一節的內容只是單個基礎窗口的顯示,我們還可以為窗口設置一些具有特殊功能的按鍵(pushbutton),並設置提示信息,提高操作友好度。下面是第二個小例子。

 1 import sys
 2 from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QToolTip
 3 from PyQt5.QtGui import QIcon,QFont
 4 from PyQt5.QtCore import QCoreApplication
 5 
 6 
 7 class Win_Example(QWidget):
 8 
 9     def __init__(self):
10         super().__init__()
11         self.initUI()
12 
13     def initUI(self):
14         self.setGeometry(300,300,300,300)
15         self.setWindowTitle('第二個小例子')
16         self.setWindowIcon(QIcon('chuan.ico')) #設置窗口圖標,即窗體左上角的圖標,注意路徑問題
17 
18         pushbtn =QPushButton('退出',self)
19         pushbtn.resize(pushbtn.sizeHint()) #resize是設置按鈕的大小,sizehint為默認大小
20         pushbtn.move(80,80) #設置按鈕的坐標為(80,80)
21         pushbtn.clicked.connect(QCoreApplication.instance().quit) #連接事件和信號
22 
23         '''設置提示信息的格式,內容'''
24         QToolTip.setFont(QFont('楷體', 15))
25         # self.setToolTip('這是提示信息')
26         self.setToolTip('這是<b>加粗的提示信息<b>') #兩個<b>之間的文字會加粗顯示
27         pushbtn.setToolTip('這是個按鈕')
28 
29 
30 if __name__ == "__main__":
31     app = QApplication(sys.argv)
32     win = Win_Example()
33     win.show()
34     sys.exit(app.exec_())
pyqt5小例子

在上面的小例子中,我們加入了更多的命令,並采用了面向對象的方法來編程。

import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QToolTip
from PyQt5.QtGui import QIcon,QFont
from PyQt5.QtCore import QCoreApplication
  • QPushButton是一個按鍵類,可以為窗口添加按鍵;
  • QToolTip是提示類,可以設置提示信息;
  • QIcon和QFont是用來設置圖標和字體樣式;
self.setWindowIcon(QIcon('chuan.ico'))

  這里為窗口設置了圖標,需要注意圖標的路徑問題。本例中,圖標就在當前目錄下。另外,圖標圖片為ico格式,最好選用32*32大小。當然,如果選擇更大的圖片,實際顯示時會自動壓縮。

pushbtn =QPushButton('退出',self)
pushbtn.resize(pushbtn.sizeHint())
pushbtn.move(80,80) 
pushbtn.clicked.connect(QCoreApplication.instance().quit) 

  這里設置了按鈕,並將pushbutton的單擊事件與quit函數連接。這里涉及了信號和槽的概念,后續會專門學習,這里不做深入討論。

  resize()可以自定義窗口的大小。sizehint()窗體默認大小

 QToolTip.setFont(QFont('楷體', 15))
  self.setToolTip('這是<b>加粗的提示信息<b>') 
  pushbtn.setToolTip('這是個按鈕')

  這里為窗體和按鍵都設置了提示信息,請注意:<b>...<b>  <i>...<i>   <u>...<u>分別可以設置提示信息加粗、斜體、下划線。這三中顯示方法可以單獨使用,也可以組合使用。另外,尖括號中的b、i、u大小寫均可。

顯示效果如下:(因為qq截圖的原因,圖片上的鼠標箭頭未能正確顯示)

 三、設置中心顯示和對話框

我們平時在操作軟件時,有時候為了防止錯誤操作,會增加一個交互界面確認操作,通識為了美觀,通常希望窗口在屏幕中心顯示。現在,我們就來學習這兩個方法。在第二節的基礎上,我們更新代碼如下:

import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QToolTip,QMessageBox,QDesktopWidget
from PyQt5.QtGui import QIcon,QFont
from PyQt5.QtCore import QCoreApplication


class Win_Example(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(300,300,300,300)
        self.setWindowTitle('第二個小例子')
        self.setWindowIcon(QIcon('chuan.ico')) #設置窗口圖標,即窗體左上角的圖標,注意路徑問題
        self.center_show()

        pushbtn =QPushButton('退出',self)
        pushbtn.resize(pushbtn.sizeHint()) #resize是設置按鈕的大小,sizehint為默認大小
        pushbtn.move(80,80) #設置按鈕的坐標為(80,80)
        pushbtn.clicked.connect(QCoreApplication.instance().quit) #連接事件和信號

        '''設置提示信息的格式,內容'''
        QToolTip.setFont(QFont('楷體', 15))
        # self.setToolTip('這是提示信息')
        self.setToolTip('這是<b>加粗的提示信息<b>') #兩個<b>之間的文字會加粗顯示
        pushbtn.setToolTip('<u>這是個按鈕<u>')

    def closeEvent(self, QCloseEvent):
        res = QMessageBox.question(self,'對話框','是否確認退出',QMessageBox.Yes|QMessageBox.No,QMessageBox.No)
        if res == QMessageBox.Yes:
            QCloseEvent.accept()
        else:
            QCloseEvent.ignore()

    def center_show(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())


if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = Win_Example()
    win.show()
    sys.exit(app.exec_())
pyqt5小例子

可以看到,首先我們有新引入了兩個類QmessageBox和QDesktopWidget。前者關於提示信息的對話框,后者可以提供屏幕的有關信息。

顯示效果如下:

 

下面,我們來分析代碼

    def closeEvent(self, QCloseEvent):
        res = QMessageBox.question(self,'對話框','是否確認退出',QMessageBox.Yes|QMessageBox.No,QMessageBox.No)
        if res == QMessageBox.Yes:
            QCloseEvent.accept()
        else:
            QCloseEvent.ignore()

這個函數功能是用戶在點擊右上角按鍵退出時,彈出消息框確認是否真的要退出。有幾個知識點需要說明下:

3.1 QMessageBox消息框的幾種類型

  •   QMessageBox.information 信息框
  •   QMessageBox.question 問答框
  •   QMessageBox.warning 警告
  •   QMessageBox.ctitical危險
  •   QMessageBox.about 關於

可根據事件的嚴重級別選擇合適的消息框,這一點類似logger。

3.2 注意QMessageBox.question()的格式

QMessageBox.question(self,'對話框','是否確認退出',QMessageBox.Yes|QMessageBox.No,QMessageBox.No)意義是:消息框標題為“對話框“,消息框內容為“是否確認退出”,按鍵1為yes,按鍵2為no,默認按鍵為no。注意按鍵1和按鍵2中間一“|”分隔

    def center_show(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

 設置窗口劇中的方法為通過self.frameGeometry()獲得主窗口大小並傳給對象qr,接着QDesktopWidget().availableGeometry().center()獲取顯示器分辨率並找到中心點位置,qr.moveCenter(cp)將主窗口中心移動到屏幕中心,self.move(qr.topLeft())窗口的左上角的坐標設置為qr的矩形左上角的坐標,這樣就把窗口居中了。

   當然,這不是唯一的方法,還可以采用如下方法:

    def center(self):
        screen = QDesktopWidget().screenGeometry() #用來計算顯示屏幕大小,QDsktopWidget是描述顯示屏幕的類
        size = self.geometry() #獲取窗口大小
        self.move((screen.width() - size.width()) / 2,(screen.height() - size.height()) / 2)

  以上兩種方法都可以。


免責聲明!

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



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