【PyQt5-Qt Designer】QLineEdit 文本輸入

QLineEdit 文本輸入

 

1、QlineEdit 基本方法

 

setAlignment()

 

按固定值方式對齊文本正則表達式

 

Qt.AlignLeft:水平方向靠左對齊編程

 

Qt.AlignRight:水平方向靠右對齊函數

 

Qt.AlignCenter:水平方向居中對齊佈局

 

Qt.AlignJustify:水平方向調整間距兩端對齊動畫

 

Qt.AlignTop:垂直方向靠上對齊加密

 

Qt.AlignBottom:垂直方向靠下對齊url

 

Qt.AlignVCenter:垂直方向居中對齊spa

 

setEchoMode()

 

設置文本框的顯示格式,容許輸入的文本顯示格式的值能夠是:.net

 

QLineEdit.Normal:正常顯示所輸入的字符,此爲默認選項設計

 

QLineEdit.NoEcho:不顯示任何輸入的字符,經常使用於密碼類型的輸入,且長度保密

 

QLineEdit.Password:顯示與平臺相關的密碼掩飾字符,而不是實際輸入的字符

 

QLineEdit.PasswordEchoOnEdit:在編輯時顯示字符,負責顯示密碼類型的輸入

 

setPlaceholderText()

 

設置文本框顯示文字

 

setMaxLength()

 

設置文本框所容許輸入的最大字符數

 

setReadOnly()

 

設置文本爲只讀

 

setText()

 

設置文本框的內容

 

text()

 

返回文本框的內容

 

setDragEnable()

 

設置文本框是否接受拖動

 

selectAll()

 

全選

 

setFocus()

 

獲得焦點

 

setInputMask()

 

設置掩碼

 

setValidator()

 

設置文本框的驗證器(驗證規則),將限制任意可能輸入的文本,可用的校驗器爲 

 

QIntValidator:限制輸入整數

 

QDoubleValidator:限制輸入浮點數

 

QRegexpValidator:檢查輸入是否符合正則表達式

 

setFont()

 

e1.setFont(QFont('Arial',20))

 

QLineEdit() 信號:

 

selectionChanged

 

只要選擇改變了,這個信號就會發射

 

textChanged

 

當修改文本內容時,這個信號就會發射

 

editingFinished

 

當編輯文本結束時,這個信號就會發射

 

 

2、介紹一個QLineEdit() 小案例,主要分爲如下幾章:

1.QLineEdit()經常使用屬性、信號、函數介紹及舉例

2. 密碼的輸入表示

3. 文本輸入欄的自動補全

4.密碼的輸入和文本輸入欄的自動補全

公用類型

QLineEdit.ActionPosition

描述如何顯示加入到輸入框中的action部件。

QLineEdit.EchoMode

描述輸入框如何顯示其內容。

舉個小例子吧

主要是針對ActionPosition舉例,EchoMode的例子在下章。

這個例子當中,咱們對拼寫的單詞進行了檢查,發現計算機可以猜想出咱們可能拼寫錯誤的單詞,並給出拼寫建議。

單詞拼寫檢查的代碼來源互聯網(感謝原做者):Python寫一個簡潔拼寫檢查器 - CSDN博客

class Line(QDialog): def Ui(self): self.line = QLineEdit(self) self.line.move(20,20) action = QAction(self) action.setIcon(QIcon('check.ico')) action.triggered.connect(self.Check) self.line.addAction(action,QLineEdit.TrailingPosition)  #對QAction對象的位置進行設定,設定在文本右邊 def Check(self): word = self.line.text() QMessageBox.information(self,'提示信息框','你輸入的用戶名是: %s"%word)

Qt.LeftToRight、Qt.RightToLeft是什麼意思呢?

它指定了Qt佈局和文本處理的方向。

對於某些語言,從右到左佈局是必需的,特別是阿拉伯語和希伯來語。

LayoutDirectionAuto 有兩個用途,當與小部件和佈局一塊兒使用時,它將暗示使用在父小部件或QApplication上設置的佈局方向。

這與QWidget. unsetLayoutDirection()具備相同的效果。當LayoutDirectionAuto與文本佈局結合使用時,它將暗示文本的方向性取決於要展開的字符串內容。

 

經常使用接口

一些經常使用接口的舉例

  • QLineEdit.text():返回輸入框的當前文本。
  • QLineEdit.addAction(Action,QLineEdit.ActionPosition):添加動做到文本輸入欄,上面已經舉過例子了。
  • QLineEdit.setAlignment(Qt.Alignment flag):屬性保存了輸入框的對齊方式(水平和垂直方向。這個知識點在

學點編程吧:PyQt5系列教程(21):標籤(QLabel)​zhuanlan.zhihu.com

有過介紹,詳情請點擊。

  • QLineEdit.setCompleter() :輸入欄的自動補全就是靠這個實現的,下下章咱們講解。
  • QLineEdit.deselect() :取消選中任何已選中的文本。
  • QLineEdit.displayText():返回顯示的文本。默認值爲一個空字符串。
  • 若是echoMode是Normal,和text()返回的同樣;若是EchoMode是Password或PasswordEchoOnEdit,會返回平臺相關的密碼掩碼字符;若是EchoMode是NoEcho,返回一個空字符串」」。
  • QLineEdit.selectedText():返回選中的的文本。若是沒有選中,返回一個空字符串。默認爲一個空字符串。
  • QLineEdit.setCursorPosition(QLineEdit.cursorPosition):設置輸入框當前光標的位置。
  • QLineEdit.setMaxLength(int):此屬性包含文本的最大容許長度。若是文本太長,將從限制的位置截斷。默認值爲32767。
  • QLineEdit.setReadOnly(bool):此屬性保存輸入框是否爲只讀。在只讀模式下,用戶仍然能夠將文本複製到剪貼板,但不能編輯它,且不顯示光標。
  • QLineEdit.setSelection(int start, int length) :從位置start選擇文本爲length個字符,容許負長度。咱們一啓動程序是否設置setSelection的,效果以下:

  • QLineEdit.setPlaceholderText(str):該屬性包含行編輯的佔位符文本。只要行編輯爲空,設置此屬性將使行編輯顯示一個灰色的佔位符文本。

一般狀況下,即便具備焦點,空行編輯也會顯示佔位符文本。可是,若是內容是水平居中的,則行編輯具備焦點時,佔位符文本不會顯示在光標下方。默認狀況下,該屬性包含一個空字符串。

  • QLineEdit.isClearButtonEnabled(bool) :是否設置清除內容的按鈕。

  • QLineEdit.setInputMask():設置掩碼,效果就是咱們演示視頻中的License輸入。

下表列出了可在一個輸入掩碼中使用的字符。 空格字符是空格的默認字符,對於容許但不須要字符的狀況須要。

掩碼由掩碼字符和分隔符字符串組成,後面能夠跟一個分號和用於空白的字符,空白字符在編輯後老是從文本中刪除。

例如:

效果就是下面這個樣子的:

 

信號

  • selectionChanged() :只要選擇改變這個信號就會被髮射。
  • cursorPositionChanged(int old, int new) :只要光標移動,這個信號就會發射。前面的位置old,新的位置是new。
  • editingFinished():按下返回或回車鍵或線條編輯失去焦點時發出此信號。
  • returnPressed():按下返回或回車鍵時發出此信號。
  • textChanged(str):只要文字發生變化就會發出此信號。文本參數是新文本。與textEdited()不一樣,當經過調用setText()以編程方式更改文本時,也會發出此信號。
  • textEdited(str) :不管什麼時候編輯文本都會發出此信號。文本參數是新文本。與textChanged()不一樣,當以編程方式更改文本時,不會發出此信號,例如經過調用setText()。

咱們以editingFinished()爲例,視頻演示中主要也用到了這個信號發射,若是完成相應的內容在最後的一欄進行檢測。

self.line = QLineEdit(self) lb = QLabel('IP地址',self) self.line.editingFinished.connect(self.Action) self.line.setInputMask('000.000.000.000;_') def Action(self): if len(self.line.text()) > 3: QMessageBox.information(self,'提示信息', '這行你完成了哦')

函數

  • clear() :清除輸入框內容
  • copy():若是echoMode()是Normal,將選中的文本複製到剪貼板。
  • cut() :若是echoMode()是Normal,將所選文本複製到剪貼板並刪除它。 若是當前的驗證不容許刪除選定的文本,cut()將複製而不刪除。
  • paste() :若是輸入框不是隻讀的,插入剪貼板中的文本到光標所在位置,刪除任何選定的文本。若是最終的結果不被當前的驗證器接受,將沒有任何反應。
  • redo() :重作上次操做,若是redo可用(isRedoAvailable() )。
  • selectAll() :選中全部文本(即:高亮),並將光標移動到末尾。當一個默認值被插入時,這很是有用,由於若是用戶在點擊部件以前就輸入,選中的文本將被刪除。
  • setText(str) :設置輸入框顯示的文本。
  • undo() :撤消上次操做(若是撤銷可用)

其它

咱們在視頻演示中,如何判斷輸入的字符是否符合相應的要求呢?使用正則表達式,即便用re模塊。這裏咱們舉一個例子:

regex_phone = '^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}$' phone = self.lineEdit_4.text() rr1 = re.compile(regex_phone) if rr1.match(phone) is None: self.lineEdit_6.setText('請填寫正確的手機號!')

咱們首先寫一個手機號碼的正則表達式(這個網上不少),而後使用re.compile()編譯一下,這樣效率會高一些,再使用match()進行匹配,若是匹配上就返回匹配上的字符串,否就不返回。詳見:

https://mp.weixin.qq.com/s?__biz=MzIxNDMzMDQ2OQ==&mid=2247484590&idx=1&sn=4bbd8179f088c22f787ac70c826b4df4&chksm=97a879a4a0dff0b2b0974f410dc08c2ad46887997d58038503d0e7a91ee3cb2b360924d9d0f6#rd

下面將介紹密碼的輸入方法,密碼的3種輸入方式,效果圖以下:

 

https://zhuanlan.zhihu.com/p/30152208

從實際使用的註冊頁面上看,通常用的比較多的是這樣的(網易郵箱註冊爲例):

 

在 https://zhuanlan.zhihu.com/p/34008281 專欄中的視頻中咱們基本上實現了這個功能,在輸入問題提示上沒有網易郵箱那麼全面,只是給出來了通用的提示信息。

固然咱們在輸入上感知更好一些,下面講解一下密碼輸入 先明後密,屏蔽鼠標和關鍵鍵盤組合操做 的案例,至於判斷兩次密碼是否一致,密碼強度問題,只要設置好相應的正則表達式進行匹配就好了。

其實還有一個密碼輸入軟鍵盤的問題,我已經設計好了,可是不屬於這個知識點,不作講解,等後期碰到相關的知識點再作講解。

設計思路

當咱們輸入密碼的時候,它顯示的是明文,可是因爲裏面有一個時間機制在裏面,必定時間內它會自動將文本輸入框裏面的內容覆蓋爲「*」,因此咱們填寫密碼的時候就好像先是有明文緊接着變成密文樣的。

核心代碼

這裏咱們繼承了QLineEdit這個類並自定義一個新類PwdLineEdit。咱們定義了兩個成員變量:

self.m_LineEditText = "" self.m_LastCharCount = 0

分別用以記錄真實的密碼和密碼出現變化前的長度。

一、在程序中咱們用到了兩個信號發射:

self.cursorPositionChanged[int,int].connect(self.DisplayPasswordAfterEditSlot) self.textEdited[str].connect(self.GetRealTextSlot)

第一個信號是在光標發生移動時產生,返回兩個整型變量並調用槽函數 DisplayPasswordAfterEditSlot(),用以顯示密文;
第二個信號是在文本編輯時產生,調用槽函數 GetRealTextSlot(),用以記錄真實的密碼。

二、如何在讓輸入的明文自動的變成密文呢?我使用了QTimer類,設置超時時間是爲200毫秒,而後自動調用DisplayPasswordSlot()。

self.time = QTimer(self) self.time.setInterval(200) self.time.start() def DisplayPasswordAfterEditSlot(self, old, new): if old >= 0 and new >= 0: if new > old: self.time.timeout.connect(self.DisplayPasswordSlot) else: self.setCursorPosition(old)

這裏的old和new分別表示光標移動先後的位置,要是new > old,明顯就是在輸入密碼,增長密碼長度;反之就是在刪除密碼字符。就是這個樣子:

 

三、顯示密文咱們是怎麼作到的呢?

mask = "" count = len(self.text()) if count > 0: for i in range(count): mask += "*"

咱們判斷輸入的長度,而後用幾個」*」覆蓋掉,最後經過setText(),覆蓋掉文本輸入框。由於有時間延時,因此就好像每寫一個就隱藏一個樣的。很神奇是吧!

四、還有最關鍵的步驟,記錄真正的密碼,也就是咱們輸入的內容。

def GetRealTextSlot(self, text): self.m_LastCharCount = len(self.m_LineEditText) if len(text) > self.m_LastCharCount: self.m_LineEditText += text[-1] elif len(text) <= self.m_LastCharCount: self.m_LineEditText = self.m_LineEditText[:-1]

當密碼在輸入的時候會自動的調用GetRealTextSlot()這個函數。

self.m_LastCharCount記錄了當前沒有變化時密碼的長度。若是當前的長度大於以前記錄的密碼長度,很明顯,密碼在新增字符,全部實際密碼是self.m_LineEditText += text[-1],即將新增的字符和原有的密碼進行合併。

反之,就刪除最後一個字符,因此就用到了self.m_LineEditText = self.m_LineEditText[:-1]。這句話要是你們不理解,我舉個簡單的例子就明白了。仍是看下動畫吧。注意看str的變化!

動畫中字符串str是不斷地減小的,其本質是每次取字符串第0位到最後一位(不含)的字符串。

其它

關於如何屏蔽鼠標右鍵或者鍵盤的一些操做,能夠參見

學點編程吧:PyQt5系列教程(12):構建咱們本身的密碼輸入框​zhuanlan.zhihu.com

這裏就再也不重複了。

相關文章
相關標籤/搜索