1. 程式人生 > >PyQt5入門(一)——基礎

PyQt5入門(一)——基礎

此總結主要參考下面這篇文章:PyQt5基本功能

文中出現的self均預設繼承了QWidget的類,改為繼承QMainWindow類也是可以的

1. 一個簡單的框架:

import sys
from PyQt5.QtWidgets import QApplication, QWidget
#匯入必要的相關庫

if __name__ == '__main__':

    w = QWidget()
    w.show()

    app = QApplication(sys.argv)
    sys.exit(app.exec_())

除了上面這種,還可以用OOP程式設計

import sys
from PyQt5.QtWidgets import QApplication, QWidget


class Example(QWidget):

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

    def initUI(self):               
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

2. 視窗大小、位置和標題的設定

#這裡假設前面已經宣告繼承了QWidget的類
self.resize(width,length)  
self.move(x,y)  # 左上角為(0,0)點

self.setGeometry(x,y,width,length)

self.setWindowTitle('window_title')

resize & move 和 setGeometry的區別參見下圖:

resize和setGeometry的對應功能是一致的,move與對應的不同

3. 程式圖示、字型、提示語

from PyQt5.QtWidgets import
QToolTip from PyQt5.Gui import QFont, QIcon #這裡只匯入與這部分內容直接相關的庫 #程式圖示 self.setWindowIcon(QIcon(image.path))#如果是在當前資料夾下,只需填入檔名即可 #字型/字號 QToolTip.setFont(QFont('SansSerif',10)) #提示語 self.setToolTip('sldfjlj')#這裡可以使用豐富的文字格式包括HTML

4. 按鈕

from PyQt5.QtWidgets import QPushButton

btn = QPushButton('Button_name',self) 

btn.resize(btn.sizeHint()) #預設尺寸
btn.move(50,50)
btn.setToolTip('')
  • 將button和程式退出聯絡起來
from PyQt5.QtCore import QCoreApplication

btn.clicked.connect(QCoreApplication.instance().quit)

5. 訊息框

from PyQt5.QtWidgets import QMessageBox
#這裡的closeEvent是一個已經存在的函式,由點選右上角的‘X’觸發,這裡是把這個函式進行修改
#所以在自己編寫的程式裡往往是看不到對這個函式的呼叫的,這個與下面一部分內容的示例是不同的

    def closeEvent(self, event):

        reply = QMessageBox.question(self,'Message',"Are you sure to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
        #第一個引數是title,第二個引數是顯示的問題,第三個引數是指定按鈕的組合出現在對話方塊中,最後一個引數是預設按鈕,就是對話框出現後敲回車執行的按鈕
        #目前來看後兩個引數是隻能這樣寫而不能寫成別的形式的,首字母甚至不能是小寫形式,感覺應該是可以改的
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()
  • 將button和訊息框聯絡起來
btn.clicked.connect(self.msg)

#顯示問題
def msg(self):
    reply = QMessageBox.question(self,'Message',"Are you sure to quit?", QMessageBox.Yes|QMessageBox.No, QMessageBox.No)

#顯示資訊
def msg(self):
    reply = QMessageBox.information(self,'資訊提示框',"ok, 彈出測試資訊")

6. 視窗居中

from PyQt5.QtWidgets import QDesktopWidget

    self.center()

    def center(self):
        #獲得視窗
        qr = self.frameGeometry()
        #獲得螢幕中心點
        cp = QDesktopWidget().availableGeometry().center()
        #顯示到螢幕中心
        qr.moveCenter(cp)
        self.move(qr.topLeft())

綜合上述功能得到如下示例:

# -*- coding: utf-8 -*-


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


class Example(QWidget):

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

        self.initUI()

    def initUI(self):
        QToolTip.setFont(QFont('SansSerif',10))

        self.setToolTip('這是一個 <b>QWidget</b> 部件')

        btn = QPushButton('退出', self)
        btn.setToolTip('這是一個 <b>QPushButton</b> 部件')
        # default size
        btn.resize(btn.sizeHint())

        btn.move(50, 50)
        btn.clicked.connect(QCoreApplication.instance().quit)

        self.setGeometry(300,300,300,200)
        self.center()

        self.setWindowTitle('tooltips')
        self.setWindowIcon(QIcon('web.jpg'))
        self.show()

    def closeEvent(self, event):

        reply = QMessageBox.question(self, 'Message',
                                     "Are you sure to quit?", QMessageBox.Yes |
                                     QMessageBox.No, QMessageBox.No)

        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

    def center(self):


        qr = self.frameGeometry() # 獲得視窗
        cp = QDesktopWidget().availableGeometry().center()# 獲得螢幕中心點
        qr.moveCenter(cp)# 顯示到螢幕中心
        self.move(qr.topLeft())

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())