一、控件添加提示信息
將鼠標停在控件上,可以顯示一個提示的信息。
需要引入: 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標簽
===