[Python自學] PyQT5-QLabel、QLineEdit、QTextEdit控件


一、控件添加提示信息

將鼠標停在控件上,可以顯示一個提示的信息。

需要引入: from PyQt5.QtWidgets import QToolTip 

如果需要修改字體,則需要引入: from PyQt5.QtGui import QFont 

class MyWindow(QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.initUI()

    def initUI(self):
        QToolTip.setFont(QFont("SansSerif",12))  # 設置提示信息的字體
        self.setToolTip("<b>你好啊</b>")  # 設置提示信息,當鼠標懸停的時候會顯示提示信息

效果:

除了給窗口可以添加提示信息,給其他控件也是可以添加的,方法一致。

二、QLabel控件

1.QLabel使用示例

import sys

from PyQt5.QtWidgets import QVBoxLayout, QApplication, QLabel, QWidget
# 使用調色板
from PyQt5.QtGui import QPalette, QPixmap, QIcon
# 導入QT,其中包含一些常量,例如顏色等
from PyQt5.QtCore import Qt


class QLabelDemo(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        label1 = QLabel(self)
        label2 = QLabel(self)
        label3 = QLabel(self)
        label4 = QLabel(self)

        # 設置Label1的屬性
        label1.setText("<font color=yellow>這是一個文本標簽.</font>")  # 設置label1的文本內容
        label1.setAutoFillBackground(True)  # 允許自動填充背景
        palette = QPalette()  # 定義一個調色板實例
        palette.setColor(QPalette.Window, Qt.blue)  # 配置調色板
        label1.setPalette(palette)  # 使用配置好的調色板
        label1.setAlignment(Qt.AlignCenter)  # 設置文本居中

        # 設置Label2的屬性
        label2.setText("<a href='#'>歡迎使用Python GUI程序</a>")

        # 設置label3的屬性
        label3.setAlignment(Qt.AlignCenter)  # 文本居中
        label3.setToolTip("這是一個圖片標簽")  # 添加提示標簽
        label3.setPixmap(QPixmap("./images/ailusha.png"))  # 內容使用一張圖片來填充

        # 設置label4的屬性
        label4.setText("<a href='https://www.jd.com/'>點擊進入京東</a>")  # 設置一個超鏈接
        label4.setAlignment(Qt.AlignRight)  # 文本靠右
        label4.setToolTip("點擊進入京東商城")  # 設置提示標簽

        # 使用垂直布局對所有label進行布局
        vbox = QVBoxLayout()  # 定義一個垂直布局實例
        vbox.addWidget(label1)  # 將label加到這個布局中
        vbox.addWidget(label2)
        vbox.addWidget(label3)
        vbox.addWidget(label4)

        # 綁定信號和槽函數
        label2.linkHovered.connect(self.linkHoverd)  # 將label2的鼠標懸停信號和槽函數綁定
        label4.linkActivated.connect(self.linkActivated)  # 將label4的點擊事件和槽函數綁定

        # 將垂直布局用到主窗口
        self.setLayout(vbox)
        # 添加窗口標題
        self.setWindowTitle("QLabel控件Demo")

    # 鼠標懸停在標簽時槽函數
    def linkHoverd(self):
        print("鼠標懸停在label上")

    def linkActivated(self):
        print("label被點擊")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon("images/icon.ico"))
    # 創建一個主窗口
    mainWin = QLabelDemo()
    # 顯示
    mainWin.show()
    # 主循環
    sys.exit(app.exec_())

在以上代碼中,我們創建了四個QLabel實例,每個實例作用不同。具體參考代碼注釋。

實現效果:

2.QLabel添加伙伴關系

def initUI(self):
    nameLabel = QLabel("&Name", self)  # 注意這里的&N,表示熱鍵為Alt+N
    nameLineEdit = QLineEdit(self)  # 用戶名輸入框
    nameLabel.setBuddy(nameLineEdit)  # 將輸入框綁定為nameLabel的伙伴,使用熱鍵時,光標切換到該輸入框

    pwdLabel = QLabel("&Password", self)  # 注意這里的&P,表示熱鍵為Alt+P
    pwdLineEdit = QLineEdit(self)
    pwdLabel.setBuddy(pwdLineEdit)

    gbox = QGridLayout()  # 使用柵格布局
    gbox.addWidget(nameLabel, 0, 0)
    gbox.addWidget(nameLineEdit, 0, 1, 1, 2)  # 占用1行2列
    gbox.addWidget(pwdLabel, 1, 0)
    gbox.addWidget(pwdLineEdit, 1, 1, 1, 2)  # 占用1行2列

    # 將柵格布局用到主窗口
    self.setLayout(gbox)
    # 添加窗口標題
    self.setWindowTitle("QLabel控件Demo")

在第1節的代碼中,將initUI替換為以上函數。

實現效果:

當我們按Alt+N時,光標切換到用戶名輸入框,當按Alt+P時,光標切換到密碼輸入框。

 二、QLineEdit控件

 QLineEdit標簽是一個單行文本輸入控件

1.回顯模式

 QLineEdit標簽有4種回顯模式(EchoMode)。

四種回顯模式:

1)Normal,即我們平時使用輸入框的模式

2)NoEcho,即不顯示,有點像我們在Linux命令行中輸入密碼時,什么都不顯示,但數據已經提交上去了。

3)Password,即輸入的內容回顯為星星或黑點形式,一般用於密碼輸入框。

4)PasswordEchoOnEdit,輸入時會顯示明文,切換到其他控件時顯示星星或黑點。

如何設置EchoMode:

nameLineEdit.setEchoMode(QLineEdit.Normal)  # 設置為普通回顯模式
pwdLineEdit.setEchoMode(QLineEdit.Password)  # 設置為密碼回顯模式

效果:

2.placeholder文本

輸入框為空時,顯示灰色的提示文本:

nameLineEdit.setPlaceholderText("請輸入用戶名")

效果:

2.校驗器

校驗器可以對輸入框輸入的內容進行校驗,只允許我們輸入規定好字符種類。

def initUI(self):
    # 整數輸入框
    intLineEdit = QLineEdit(self)  # 用戶名輸入框
    # 只能輸入字母和數字的輸入框
    regLineEdit = QLineEdit(self)
    # 整數校驗器
    intValidator = QIntValidator(self)
    intValidator.setRange(1, 99)
    # 正則表達式校驗器
    regValidator = QRegExpValidator(self)
    reg = QRegExp("[a-zA-Z0-9]+$")
    regValidator.setRegExp(reg)

    # 使用校驗器
    intLineEdit.setValidator(intValidator)
    regLineEdit.setValidator(regValidator)

    vbox = QVBoxLayout()
    vbox.addWidget(intLineEdit)
    vbox.addWidget(regLineEdit)

    # 將垂直布局用到主窗口
    self.setLayout(vbox)
    # 添加窗口標題
    self.setWindowTitle("QLineEdit控件Demo")

效果:

 

第一個輸入框除了1-99的數字,其他都不能輸入。第二個輸入框除了字母和數字,其他都不能輸入。

注:除了整數校驗器,還有浮點型等很多校驗器。

3.使用掩碼來限時輸入格式

除了第2節中的校驗器可以限制輸入,QT還給我們提供了掩碼來限制輸入。

例如:

def initUI(self):
    
    # 定義幾個QLineEdit實例
    ipLineEdit = QLineEdit(self)
    macLineEdit = QLineEdit(self)
    dateLineEdit = QLineEdit(self)
    licenseLineEdit = QLineEdit(self)

    # 使用掩碼
    ipLineEdit.setInputMask('000.000.000.000;_')  # 0表示只能輸入數字,也可以不輸入
    macLineEdit.setInputMask('HH:HH:HH:HH:HH:HH;_')  # H表示十六進制字符[a-fA-f0-9]
    dateLineEdit.setInputMask('0000-00-00')
    licenseLineEdit.setInputMask('>AAAA-AAAA-AAAA-AAAA-AAAA;#')  # A表示A-Za-z,>表示后面全部為大寫

    vbox = QVBoxLayout()
    vbox.addWidget(ipLineEdit)
    vbox.addWidget(macLineEdit)
    vbox.addWidget(dateLineEdit)
    vbox.addWidget(licenseLineEdit)

    # 將垂直布局用到主窗口
    self.setLayout(vbox)
    # 添加窗口標題
    self.setWindowTitle("QLineEdit控件Demo")

效果:

 

 

QT為我們提供了以下掩碼:

A

ASCII字母字符是必須的,取值空間是A-Z,a-z

a

ASCII 字母字符是允許的但不是必須的.

N

ASCII字母字符是必須的. A-Z, a-z, 0-9.

n

ASCII 字母字符是允許的但不是必須的.

X

任何字符都可以,是必須需要的.

x

任何字符都允許的,但不是必須需要的.

9

ASCII 數字是必須要的. 0-9.

0

ASCII 數字是允許的,但不是必須要的.

D

ASCII  數字是必須要的. 1-9.

d

ASCII 數字是允許的,但不是必須要的 (1-9).

#

ASCII 數字是或加減符號允許的,但不是必須要的.

H

十六進制數據字符是必須要的. A-F, a-f, 0-9.

h

十六進制數據字符是允許的,但不是必須要的.

B

二進制數據字符是必須要的. 0-1.

b

二進制數據字符是允許的,但不是必須要的.

>

所有的字符字母都都大寫的.

<

所有的字符字幕都是小寫的.

!

關閉大小寫.

\

使用 \ 去轉義上面的字符,如果再需要顯示上述字符的時候.

 

三、QTextEdit控件

1.使用QTextEdit控件

前面學習的QLineEdit是單行輸入框,而QTextEdit是多行輸入框。

def initUI3(self):
    self.textEdit = QTextEdit()
    self.buttontext = QPushButton("顯示文本")
    self.buttonhtml = QPushButton("顯示HTML")

    vbox = QVBoxLayout()
    vbox.addWidget(self.textEdit)
    vbox.addWidget(self.buttontext)
    vbox.addWidget(self.buttonhtml)

    self.setLayout(vbox)
    self.buttontext.clicked.connect(self.onClickButtonText)
    self.buttonhtml.clicked.connect(self.onClickButtonHtml)
    
# 點擊buttontext按鈕觸發該槽函數
def onClickButtonText(self):
    self.textEdit.setPlainText("Hello World,世界你好嗎?")
    
# 點擊buttonhtml按鈕觸發該槽函數
def onClickButtonHtml(self):
    self.textEdit.setHtml("<font color='blue' size='5'>Hello World</font>")

效果:

2.獲取QTextEdit中的值

self.textEdit.toPlainText()  # 獲取其中純文本
self.textEdit.toHtml()  # 獲取其中的html標簽

 

===


免責聲明!

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



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