一、QLineEdit文本編輯,光標操作和常用信號
1.基本知識
- 直接操作文本,通過光標操作以及文編發生變化時會發出哪些信號。
- 選中字符
# False表示只移動不選中,True表示選中加移動
# cursorBackward
# cursorForward
# cursorWordBackward # 按照單詞長度移動,不用輸入步長,以空格為間隔
# cursorWordForward
# home
# end
# backspace() 退格
# del_() 刪除
# clear() 清空
# copy() 賦值
# cut() 剪切
# paste() 粘貼
# isUndoAvailable() undo() 撤銷
# isRedoAvailable() redo() 重做
# setDragEnabled() 拖放
# setSelection
# 放在led的槽函數中測試
# led.setSelection(1,2) # 選中指定區域文本
# led.selectAll() # 選中所有文本
# led.deselect() # 取消選中文本
# led.hasSelectedText() # 是否有選中文本
# led.selectedText() # 獲取選中文本
# led.selectionStart() # 選中的開始位置
# led.selectionEnd() # 選中的結束位置
# led.selectionLength() # 選中的文本長度
# textEdited() # 文本編輯時發出的信號
# textChanged() # 文本發生改變時
# returnPressed() # 回車鍵被按下時
# editingFinished() # 結束編輯的時候
# cursorPositionChanged() # 光標位置發生改變時
# selectionChanged() # 選中的文本發生改變的時候
2.代碼
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('QLineEdit常見方法和信號 - PyQt5中文網')
window.resize(600, 450)
window.move(300, 300)
led = QLineEdit(window)
led.setText('單行文本框')
led.move(100, 100)
btn = QPushButton('復制', window)
btn.move(100, 130)
def cpoy_btn() :
print(led.isModified()) #判斷是否處於別修改狀態 修改了是True 否則為False
led.setModified(False)
btn.pressed.connect(cpoy_btn)
led1 = QLineEdit(window)
led1.setText('光標位置控制方法')
led1.move(250, 100)
btn1 = QPushButton('按鈕', window)
btn1.move(250, 130)
# False表示只移動不選中,True表示選中加移動
# cursorBackward
# cursorForward
# cursorWordBackward # 按照單詞長度移動,不用輸入步長,以空格為間隔
# cursorWordForward
# home
# end
def cur_move() :
#led1.cursorBackward(False,2) #FALSE表示光標僅僅移動不選中
#led1.cursorBackward(True,2) #True表示光標即選中又移動
# led1.home(True) #光標移動到最前方,全選 False表示僅僅光標移動到最前方
#led1.setCursorPosition(len(led1.text()/2))# 按照單詞長度移動,不用輸入步長,以空格為間隔
# led1.setCursorPosition(3)
# led1.cursorWordForward(True) #按照空格間隔移動
led1.setFocus()
#led1.setSelection(1, 4)
btn1.pressed.connect(cur_move)
# 文本對其方式設置
led2 = QLineEdit(window)
led2.setText('光標位置控制方法')
led2.move(100, 200)
led2.resize(200, 200)
led2.setTextMargins(0, 10, 20, 0) # 左上右下
led2.setAlignment(Qt.AlignRight | Qt.AlignTop) #按照枚舉值 設置位置
# 常見編輯功能 右鍵就有這些功能
# backspace() 退格
# del_() 刪除
# clear() 清空
# copy() 賦值
# cut() 剪切
# paste() 粘貼
# isUndoAvailable() undo() 撤銷
# isRedoAvailable() redo() 重做
# setDragEnabled() 拖放
# 文本選中方法
# setSelection
# 放在led的槽函數中測試
# led.setSelection(1,2) # 選中指定區域文本
# led.selectAll() # 選中所有文本
# led.deselect() # 取消選中文本
# led.hasSelectedText() # 是否有選中文本
# led.selectedText() # 獲取選中文本
# led.selectionStart() # 選中的開始位置
# led.selectionEnd() # 選中的結束位置
# led.selectionLength() # 選中的文本長度
# 可用信號
# textEdited() # 文本編輯時發出的信號
# textChanged() # 文本發生改變時
# returnPressed() # 回車鍵被按下時
# editingFinished() # 結束編輯的時候
# cursorPositionChanged() # 光標位置發生改變時
# selectionChanged() # 選中的文本發生改變的時候
led3 = QLineEdit(window)
led3.move(350, 200)
led3.resize(150, 60)
led4 = QLineEdit(window)
led4.move(350, 270)
led4.resize(150, 60)
led3.textEdited.connect(lambda val:print('文本編輯時發出的信號',val)) # 用戶在前段編輯的時候觸發
led3.textChanged.connect(lambda val:print('文本發生改變時',val)) # 前后端有任何變化都會觸發
led3.setText('123')
led3.returnPressed.connect(lambda :print('123',led4.setFocus())) #按下ENTER就會發出信號
led3.editingFinished.connect(lambda : print('結束編輯的時候'))#結束標記 就會發出信號
window.show()
sys.exit(app.exec_())
3.效果
