PyQt(Python+Qt)學習隨筆:QLineEdit行編輯器功能詳解

一、概述

QLineEdit部件是一個單行文本編輯器,支持撤消和重做、剪切和粘貼以及拖放。
默認情況下,QLineEdits有一個由平臺樣式指南指定的框架,可以通過調用setFrame(false)將其關閉。QLineEdit提供了用於編輯的默認鍵,相關鍵及用途官網資料有介紹,另外還提供了一個上下文菜單(通常通過鼠標右鍵單擊調用),其中顯示了一些編輯選項。

二、屬性

Designer中QLineEdit的可設置屬性如下:
在這裏插入圖片描述
這些屬性作用及訪問方法如下:

  • inputMask:inputMask用於設置行編輯器的輸入掩碼,缺省值爲空字符串,行輸入掩碼可以通過inputMask()和setInputMask()方法來訪問,當設置inputMask爲空表示沒有輸入掩碼,相關掩碼字符對應含義請參考官方文檔
  • text:text即爲行編輯器當前的文本,缺省值爲空字符串,可通過text()和setText()方法來訪問
  • maxLength:maxLength爲行編輯器允許輸入的最大長度,缺省值爲32767,可通過方法maxLength()和setMaxLength()訪問
  • frame:frame控制行編輯器是否顯示框架,缺省值爲True,可通過hasFrame()和setFrame()方法來訪問
  • echoMode:echoMode屬性控制行編輯器的回顯模式,其類型爲枚舉類型QLineEdit.EchoMode,缺省值爲QLineEdit.Normal,可通過方法setEchoMode() 和 echoMode()來訪問
  • cursorPosition:cursorPosition光標位置,缺省值爲0,可以通過cursorPosition()和setCursorPosition()來訪問
  • alignment:alignment爲對齊方式,類型爲Qt.Alignment,缺省值爲 Qt.AlignLeft 與Qt.AlignVCenter的求或的值,可通過alignment()和setAlignment()方法訪問
  • dragEnabled:dragEnabled用於控制行編輯器在用戶選擇了文本後按下鼠標開始移動時是否開始拖動,缺省值爲False,可通過dragEnabled()和setDragEnabled()訪問
  • readOnly:readOnly控制行編輯器是否只讀,缺省爲False,可通過方法isReadOnly()和setReadOnly()訪問
  • placeholderText:placeholderText爲行編輯器沒有字符時顯示的灰色佔位字符,缺省值爲空字符串,可通過方法placeholderText() 和setPlaceholderText()來訪問
  • cursorMoveStyle:cursorMoveStyle用於控制行編輯器中光標的移動樣式,其類型爲枚舉類型Qt.CursorMoveStyle,缺省值爲Qt.LogicalMoveStyle ,可通過方法cursorMoveStyle()、setCursorMoveStyle()來訪問
  • clearButtonEnabled:clearButtonEnabled用於控制在行編輯器右邊是否顯示一個可以清空文本的按鈕,缺省值爲False,可使用方法isClearButtonEnabled()、setClearButtonEnabled()來訪問。

除了以上Designer中可設置的屬性之外,行編輯器還有如下重要屬性:

  • acceptableInput:acceptableInput屬性用於確認輸入是否滿足inputMask和validator的要求,可通過hasAcceptableInput()訪問。
  • displayText:displayText屬性保存顯示的文字,正常情況下與text屬性一樣,但開啓echoMode的密碼模式或無回顯模式時返回不一樣,如密碼可能返回星號字符串、無回顯返回空字符串,可通過displayText()方法訪問
  • hasSelectedText :hasSelectedText 屬性用於確認當前是否有選中的文本,可通過方法hasSelectedText() 訪問
  • selectedText :selectedText 屬性用於獲取當前選擇的文本,通過方法selectedText()方法
  • modified:modified屬性用於確認文本是否修改過,當調用setText設置文本時該屬性會置爲false,當用戶改變了文本時爲True,可通過isModified()和setModified()方法訪問
  • undoAvailable:undoAvailable屬性用於確認undo是否可用,當用戶修改了數據時undo就可用,可通過方法isUndoAvailable()方法訪問
  • redoAvailable:redoAvailable用於確認是否可以進行redo操作,redo操作是在執行undo之後可用,可通過方法isRedoAvailable() 訪問

三、重要方法

3.1、addAction方法

addAction方法可以在行編輯器的頭或尾增加一個帶圖標的QAction對象,通過QAction對象的信號關聯槽方法可以實現特定場景的處理,如在行編輯器中查找、清除或其他操作。調用方法:

  • addAction(QAction action, ActionPosition position)
  • addAction(const QIcon icon, ActionPosition position)

示例代碼:

		icon = QtGui.QIcon("searchicon.gif")
        self.actionfind = QtWidgets.QAction(icon,'find',self)
        self.actionfind.triggered.connect(self.findText)
        self.input_watermark.addAction(self.actionfind, QtWidgets.QLineEdit.LeadingPosition)

執行截圖:
在這裏插入圖片描述

3.2、backspace方法和del方法

如果行編輯器中沒有選擇文本,backspace刪除光標左側的字符,並將光標向左移動一個位置,del刪除光標右側的字符。如果選擇了任何文本,則光標將移動到選定文本的開頭並刪除選定文本。

3.3、cursorForward和cursorBackward方法

  • cursorForward(bool mark, int steps = 1)
    將光標向前移動steps 個字符,如果mark爲True,則經過的每個字符都將添加到選定內容中;如果mark爲False,則經過字符的選擇標記都被清除。
  • cursorBackward(bool mark, int steps = 1)
    將光標回退步steps 個字符,如果mark爲True,則回退經過的每個字符都將添加到選定內容中;如果mark爲False,則經過字符的選擇標記都被清除。

3.4、cursorWordBackward和cursorWordForward方法

cursorWordBackward和cursorWordForward方法將光標後退或前移一個詞。

  • cursorWordBackward(bool mark)
  • cursorWordForward(bool mark)
    如果mark爲True,經過的詞會被選中,否則會清除選中。

3.5、deselect、selectionStart方法

deselect將當前選中的文本去選擇,selectionStart返回選中文本的第一個字符位置,如果無文本選中則返回-1。

3.6、setSelection方法

  • setSelection(int start, int length)
    將start位置開始的長度爲length的文本選中,length可以爲負數,表示向左選擇。

3.7、setValidator和setValidator方法

  • setValidator(QValidator v)
  • validator()
    這兩個方法用於訪問行編輯器設置的校驗對象,校驗對象設置後,不符合校驗要求的輸入被攔截但無任何信息輸出。

四、信號

  • cursorPositionChanged(int old, int new):每當光標移動時,就會發出cursorPositionChanged信號。以前的位置保存在old中,新的保存在new中
  • editingFinished():當在行編輯器中按下回車鍵或行編輯器失去焦點時發出editingFinished信號,但當行編輯器上設置了設置了一個validator或inputMask且輸入數據不滿足約束時,回車鍵不會觸發本信號
  • returnPressed():當在行編輯器中按下回車鍵時發出returnPressed信號,但當行編輯器上設置了設置了一個validator或inputMask且輸入數據不滿足約束時,回車鍵不會觸發本信號
  • selectionChanged():當行編輯器中的選擇範圍發生變化時發出selectionChanged信號
  • textChanged(text):當行編輯器中的文本發生變化(包括調用setText改變文本)時發射本信號,text爲最新文本
  • textEdited(text):當行編輯器中的文本發生手工編輯時發射本信號,text爲最新文本

五、槽方法

這些槽方法是執行行編輯器的相關操作時被調用:

  • clear()
  • copy()
  • cut()
  • paste()
  • redo()
  • selectAll()
  • setText( str)
  • undo()

六、小結

行編輯器用於進行單行文本的編輯,可以使用setText()或insert()更改文本,可以執行undo和redo,文本可以使用text()方法獲取,文本的長度可以限制爲maxLength()大小。通過更改行編輯的echoMode(),它還可以用作“只寫”字段或用於輸入密碼等,可以使用validator()或inputMask()來約束輸入數據的格式。

在設置了EchoMode不同模式的情況下,顯示的文本可能和真正的文本不同,顯示文本可以使用displayText()檢索。文本可以使用setSelection()或selectAll()進行選擇,選擇文本可以執行cut、copy和paste操作,執行操作時相關的槽方法會執行。

當文本更改時,將發出textChanged()信號;當文本更改不是通過調用setText()時,將發出textEdited()信號;當光標移動時,將發出cursorPositionChanged()信號;當按下回車鍵或回車鍵時,將發出returnPressed()信號。

編輯完成後,無論是因爲行編輯失去焦點還是按下回車鍵,都會發出editing finished()信號。

注意,如果在edit行上設置了驗證器,那麼只有驗證器返回QValidator.Acceptable時,纔會發出returnPressed()/editingFinished()信號。

行編輯器還提供了一個上下文菜單(通常通過鼠標右鍵單擊調用),菜單提供了一些編輯選項。

老猿Python,跟老猿學Python!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章