1. 程式人生 > >【第八節】PyQt5控制元件(II)

【第八節】PyQt5控制元件(II)

在這裡我們將繼續介紹PyQt5控制元件。我們將介紹QPixmap、QLineEdit QSplitter,QComboBox。

QPixmap

QPixmap是用於處理影象的控制元件。是優化的顯示影象在螢幕上。在我們的程式碼示例中,我們將使用QPixmap視窗顯示一個影象。

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

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

"""

PyQt5 tutorial

In this example, we dispay an image

on the window.

author: py40.com

last edited: 2017年3月

"""

import sys

from PyQt5.QtWidgets import (QWidget, QHBoxLayout,

                             QLabel, QApplication)

from PyQt5.QtGui import QPixmap

class Example(QWidget):

    def __init__(self):

        super().__init__()

        self.initUI()

    def initUI(self):

        hbox = QHBoxLayout(self)

        pixmap = QPixmap("icon.png")

        lbl = QLabel(self)

        lbl.setPixmap(pixmap)

        hbox.addWidget(lbl)

        self.setLayout(hbox)

        self.move(300, 200)

        self.setWindowTitle('Red Rock')

        self.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)

    ex = Example()

    sys.exit(app.exec_())

在視窗上顯示一個圖片

1

pixmap = QPixmap("icon.png")

建立一個QPixmap 物件,它將傳入的檔名作為引數。

1

2

lbl = QLabel(self)

lbl.setPixmap(pixmap)

我們將這個pixmap放到QLabel控制元件中。

QQ圖片20170327112954

文字框 QLineEdit

QLineEdit是用於輸入或編輯單行文字的控制元件。它還有撤銷重做、剪下複製和拖拽功能。

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

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

"""

PyQt5 tutorial

This example shows text which

is entered in a QLineEdit

in a QLabel widget.

author: py40.com

last edited: 2017年3月

"""

import sys

from PyQt5.QtWidgets import (QWidget, QLabel,

                             QLineEdit, QApplication)

class Example(QWidget):

    def __init__(self):

        super().__init__()

        self.initUI()

    def initUI(self):

        self.lbl = QLabel(self)

        qle = QLineEdit(self)

        qle.move(60, 100)

        self.lbl.move(60, 40)

        qle.textChanged[str].connect(self.onChanged)

        self.setGeometry(300, 300, 280, 170)

        self.setWindowTitle('QLineEdit')

        self.show()

    def onChanged(self, text):

        self.lbl.setText(text)

        self.lbl.adjustSize()

if __name__ == '__main__':

    app = QApplication(sys.argv)

    ex = Example()

    sys.exit(app.exec_())

示例中展示了一個QLineEdit與一個QLabel。我們在QLineEdit中輸入的文字會實時顯示在QLabel控制元件中。

1

qle = QLineEdit(self)

建立QLineEdit

1

qle.textChanged[str].connect(self.onChanged)

文字框的內容發生改變的時候,會呼叫onChanged方法

1

2

3

4

def onChanged(self, text):

    self.lbl.setText(text)

    self.lbl.adjustSize()

在onChanged()方法中我們將QLabel控制元件的文字設定為輸入的內容。通過呼叫adjustSize()方法將QLabel控制元件的尺寸調整為文字的長度。

QQ圖片20170327113529

QSplitter

通過QSplitter,使用者可以拖動子控制元件邊界來調整子控制元件的尺寸。在下面的示例中,我們展示了三個由兩個QSplitter組織的QFrame控制元件。

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

56

57

58

59

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

"""

PyQt5 tutorial

This example shows

how to use QSplitter widget.

author: py40.com

last edited: 2017年3月

"""

import sys

from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QFrame,

                             QSplitter, QStyleFactory, QApplication)

from PyQt5.QtCore import Qt

class Example(QWidget):

    def __init__(self):

        super().__init__()

        self.initUI()

    def initUI(self):

        hbox = QHBoxLayout(self)

        topleft = QFrame(self)

        topleft.setFrameShape(QFrame.StyledPanel)

        topright = QFrame(self)

        topright.setFrameShape(QFrame.StyledPanel)

        bottom = QFrame(self)

        bottom.setFrameShape(QFrame.StyledPanel)

        splitter1 = QSplitter(Qt.Horizontal)

        splitter1.addWidget(topleft)

        splitter1.addWidget(topright)

        splitter2 = QSplitter(Qt.Vertical)

        splitter2.addWidget(splitter1)

        splitter2.addWidget(bottom)

        hbox.addWidget(splitter2)

        self.setLayout(hbox)

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

        self.setWindowTitle('QSplitter')

        self.show()

    def onChanged(self, text):

        self.lbl.setText(text)

        self.lbl.adjustSize()

if __name__ == '__main__':

    app = QApplication(sys.argv)

    ex = Example()

    sys.exit(app.exec_())

示例中我們建立了三個QFrame與兩個QSplitter。注意在某些主題中這些QSplitter可能會不可見。

1

2

topleft = QFrame(self)

topleft.setFrameShape(QFrame.StyledPanel)

我們使用一個風格框架為了看到QFrame小部件之間的界限。

1

2

3

splitter1 = QSplitter(Qt.Horizontal)

splitter1.addWidget(topleft)

splitter1.addWidget(topright)

我們建立一個QSplitter小部件和新增兩個幀。

1

2

splitter2 = QSplitter(Qt.Vertical)

splitter2.addWidget(splitter1)

我們也可以將QSplitter新增到另一個QSplitter控制元件中。

QQ圖片20170327114004

下拉列表 QComboBox

QComboBox是允許使用者從下拉列表中進行選擇的控制元件。

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

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

"""

PyQt5 tutorial

This example shows how to use

a QComboBox widget.

author: py40.com

last edited: 2017年3月

"""

import sys

from PyQt5.QtWidgets import (QWidget, QLabel,

                             QComboBox, QApplication)

class Example(QWidget):

    def __init__(self):

        super().__init__()

        self.initUI()

    def initUI(self):

        self.lbl = QLabel("Ubuntu", self)

        combo = QComboBox(self)

        combo.addItem("Ubuntu")

        combo.addItem("Mandriva")

        combo.addItem("Fedora")

        combo.addItem("Arch")

        combo.addItem("Gentoo")

        combo.move(50, 50)

        self.lbl.move(50, 150)

        combo.activated[str].connect(self.onActivated)

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

        self.setWindowTitle('QComboBox')

        self.show()

    def onActivated(self, text):

        self.lbl.setText(text)

        self.lbl.adjustSize()

if __name__ == '__main__':

    app = QApplication(sys.argv)

    ex = Example()

    sys.exit(app.exec_())

示例中展示了一個QComboBox與一個QLabel,QComboBox控制元件中有5個選項(Linux系統的幾個發行版名稱)。QLabel控制元件會顯示QComboBox中選中的某個選項。

1

2

3

4

5

6

combo = QComboBox(self)

combo.addItem("Ubuntu")

combo.addItem("Mandriva")

combo.addItem("Fedora")

combo.addItem("Arch")

combo.addItem("Gentoo")

建立了一個有五個選項的QComboBox

1

combo.activated[str].connect(self.onActivated)

當選中某個條目時會呼叫onActivated()方法。

1

2

3

4

def onActivated(self, text):

    self.lbl.setText(text)

    self.lbl.adjustSize()

在方法中我們將QLabel控制元件的內容設定為選中的條目,然後調整它的尺寸。

QQ圖片20170327114347