1. 程式人生 > >【第二節】PyQt5基本功能

【第二節】PyQt5基本功能

簡單的例子

PyQt5是一種高階的語言,下面只有幾行程式碼就能顯示一個小視窗。底層已經實現了視窗的基本功能。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

#!/usr/bin/python3

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

"""

Py40.com PyQt5 tutorial

In this example, we create a simple

window in PyQt5.

author: Jan Bodnar

website: py40.com

last edited: January 2015

"""

import sys

#這裡我們提供必要的引用。基本控制元件位於pyqt5.qtwidgets模組中。

from PyQt5.QtWidgets import QApplication, QWidget

if __name__ == '__main__':

    #每一pyqt5應用程式必須建立一個應用程式物件。sys.argv引數是一個列表,從命令列輸入引數。

    app = QApplication(sys.argv)

    #QWidget部件是pyqt5所有使用者介面物件的基類。他為QWidget提供預設建構函式。預設建構函式沒有父類。

    w = QWidget()

    #resize()方法調整視窗的大小。這離是250px寬150px高

    w.resize(250, 150)

    #move()方法移動視窗在螢幕上的位置到x = 300,y = 300座標。

    w.move(300, 300)

    #設定視窗的標題

    w.setWindowTitle('Simple')

    #顯示在螢幕上

    w.show()

    #系統exit()方法確保應用程式乾淨的退出

    #的exec_()方法有下劃線。因為執行是一個Python關鍵詞。因此,exec_()代替

    sys.exit(app.exec_())

上面的示例程式碼在螢幕上顯示一個小視窗。

simple

應用程式的圖示

應用程式圖示是一個小的影象,通常在標題欄的左上角顯示。在下面的例子中我們將介紹如何做pyqt5的圖示。同時我們也將介紹一些新方法。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

#!/usr/bin/python3

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

"""

py40 PyQt5 tutorial

This example shows an icon

in the titlebar of the window.

author: Jan Bodnar

website: py40.com

last edited: January 2015

"""

import sys

from PyQt5.QtWidgets import QApplication, QWidget

from PyQt5.QtGui import QIcon

class Example(QWidget):

    def __init__(self):

        super().__init__()

        self.initUI() #介面繪製交給InitUi方法

    def initUI(self):

        #設定視窗的位置和大小

        self.setGeometry(300, 300, 300, 220)  

        #設定視窗的標題

        self.setWindowTitle('Icon')

        #設定視窗的圖示,引用當前目錄下的web.png圖片

        self.setWindowIcon(QIcon('web.png'))        

        #顯示視窗

        self.show()

if __name__ == '__main__':

    #建立應用程式和物件

    app = QApplication(sys.argv)

    ex = Example()

    sys.exit(app.exec_())

前面的例子是在程式風格。Python程式語言支援程式和麵向物件程式設計風格。Pyqt5使用OOP程式設計。

1

2

3

4

5

class Example(QWidget):

    def __init__(self):

        super().__init__()

        ...

面向物件程式設計有三個重要的方面:類、變數和方法。這裡我們建立一個新的類為Examle。Example繼承自QWidget類。

icon

顯示提示語

在下面的例子中我們顯示一個提示語

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

#!/usr/bin/python3

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

"""

Py40 PyQt5 tutorial

This example shows a tooltip on

a window and a button.

author: Jan Bodnar

website: py40.com

last edited: January 2015

"""

import sys

from PyQt5.QtWidgets import (QWidget, QToolTip,

    QPushButton, QApplication)

from PyQt5.QtGui import QFont    

class Example(QWidget):

    def __init__(self):

        super().__init__()

        self.initUI()

    def initUI(self):

        #這種靜態的方法設定一個用於顯示工具提示的字型。我們使用10px滑體字型。

        QToolTip.setFont(QFont('SansSerif', 10))

        #建立一個提示,我們稱之為settooltip()方法。我們可以使用豐富的文字格式

        self.setToolTip('This is a <b>QWidget</b> widget')

        #建立一個PushButton併為他設定一個tooltip

        btn = QPushButton('Button', self)

        btn.setToolTip('This is a <b>QPushButton</b> widget')

        #btn.sizeHint()顯示預設尺寸

        btn.resize(btn.sizeHint())

        #移動視窗的位置

        btn.move(50, 50)      

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

        self.setWindowTitle('Tooltips')    

        self.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)

    ex = Example()

    sys.exit(app.exec_())

執行程式,顯示一個視窗tooltips

關閉視窗

關閉一個視窗可以點選標題欄上的X。在下面的例子中,我們將展示我們如何通過程式設計來關閉視窗。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

#!/usr/bin/python3

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

"""

Py40 PyQt5 tutorial

This program creates a quit

button. When we press the button,

the application terminates.

author: Jan Bodnar

website: py40.com

last edited: January 2015

"""

import sys

from PyQt5.QtWidgets import QWidget, QPushButton, QApplication

from PyQt5.QtCore import QCoreApplication

class Example(QWidget):

    def __init__(self):

        super().__init__()

        self.initUI()

    def initUI(self):              

        qbtn = QPushButton('Quit', self)

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

        qbtn.resize(qbtn.sizeHint())

        qbtn.move(50, 50)      

        self.setGeometry(300, 300, 250, 150)

        self.setWindowTitle('Quit button')    

        self.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)

    ex = Example()

    sys.exit(app.exec_())

quitbutton

訊息框

預設情況下,如果我們單擊x按鈕視窗就關門了。有時我們想修改這個預設的行為。例如我們在編輯器中修改了一個檔案,當關閉他的時候,我們顯示一個訊息框確認。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

#!/usr/bin/python3

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

"""

ZetCode PyQt5 tutorial

This program shows a confirmation

message box when we click on the close

button of the application window.

author: Jan Bodnar

website: zetcode.com

last edited: January 2015

"""

import sys

from PyQt5.QtWidgets import QWidget, QMessageBox, QApplication

class Example(QWidget):

    def __init__(self):

        super().__init__()

        self.initUI()

    def initUI(self):              

        self.setGeometry(300, 300, 250, 150)        

        self.setWindowTitle('Message box')    

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

if __name__ == '__main__':

    app = QApplication(sys.argv)

    ex = Example()

    sys.exit(app.exec_())

我們關閉視窗的時候,觸發了QCloseEvent。我們需要重寫closeEvent()事件處理程式。

1

2

3

reply = QMessageBox.question(self, 'Message',

    "Are you sure to quit?", QMessageBox.Yes |

    QMessageBox.No, QMessageBox.No)

我們顯示一個訊息框,兩個按鈕:“是”和“不是”。第一個字串出現在titlebar。第二個字串訊息對話方塊中顯示的文字。第三個引數指定按鈕的組合出現在對話方塊中。最後一個引數是預設按鈕,這個是預設的按鈕焦點。

1

2

3

4

if reply == QtGui.QMessageBox.Yes:

    event.accept()

else:

    event.ignore()  

我們處理返回值,如果單擊Yes按鈕,關閉小部件並終止應用程式。否則我們忽略關閉事件。

messagebox

視窗顯示在螢幕的中間

下面的指令碼顯示瞭如何在螢幕中心顯示視窗。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

#!/usr/bin/python3

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

"""

Py40 PyQt5 tutorial

This program centers a window

on the screen.

author: Jan Bodnar

website: py40.com

last edited: January 2015

"""

import sys

from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication

class Example(QWidget):

    def __init__(self):

        super().__init__()

        self.initUI()

    def initUI(self):              

        self.resize(250, 150)

        self.center()

        self.setWindowTitle('Center')    

        self.show()

    #控制視窗顯示在螢幕中心的方法    

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

QtGui,QDesktopWidget類提供了使用者的桌面資訊,包括螢幕大小。