本篇Pyside6的第七篇,开启新功能了。单行文本编辑器。
源代码片段
class QLineEdit(QWidget): """ QLineEdit(self, arg__1: str, parent: Optional[PySide6.QtWidgets.QWidget] = None) -> None QLineEdit(self, parent: Optional[PySide6.QtWidgets.QWidget] = None) -> None """
❝这里简单的告诉了你它可以怎么写。所以我们简单的试试。
❞
一个简单的单行文本示例
from PySide6.QtWidgets import QApplication, QWidget, QLineEdit class Edit(QWidget): def __init__(self): super(Edit, self).__init__() self.UI() self.setGeometry(200,200,500,300) self.setWindowTitle("QLineEdit") self.show() def UI(self): # self.line = QLineEdit(self) self.line = QLineEdit("请输入内容",self) self.line.setGeometry(50,50,200,30) if __name__ == '__main__': app = QApplication([]) edit = Edit() app.exec()
❝QLineEdit的默认参数写法有点类似于.setText(),后面会讲到
❞
显示模式
QLineEdit.EchoMode.Normal 正常显示用户输入的文本 QLineEdit.EchoMode.NoEcho 不会显示任何输入的文本 QLineEdit.EchoMode.Password 用户输入时显示一个密码字符 QLineEdit.EchoMode.PasswordEchoOnEdit 开始输入时显示密码字符
from PySide6.QtWidgets import QApplication, QWidget, QLineEdit class Edit(QWidget): def __init__(self): super(Edit, self).__init__() self.UI() self.setGeometry(200, 200, 500, 300) self.setWindowTitle("QLineEdit") self.show() def UI(self): self.label_1 = QLineEdit(self) self.label_2 = QLineEdit(self) self.label_3 = QLineEdit(self) self.label_4 = QLineEdit(self) self.label_1.setGeometry(50, 50, 200, 30) self.label_1.setPlaceholderText("账号") # 按字符输入时的形式显示。默认值。 self.label_1.setEchoMode(QLineEdit.EchoMode.Normal) self.label_2.setGeometry(50, 90, 200, 30) self.label_2.setPlaceholderText("密码") # 不显示任何内容。常见场景:密码的长度也需要被保护 self.label_2.setEchoMode(QLineEdit.EchoMode.NoEcho) self.label_3.setGeometry(50, 130, 200, 30) self.label_3.setPlaceholderText("确认密码") # 显示时用平台决定的密码掩码字符替代真实输入的字符 self.label_3.setEchoMode(QLineEdit.EchoMode.Password) self.label_4.setGeometry(50, 170, 200, 30) self.label_4.setPlaceholderText("邮箱") # 当字符正在被编辑时显示 self.label_4.setEchoMode(QLineEdit.EchoMode.PasswordEchoOnEdit) if __name__ == '__main__': app = QApplication([]) edit = Edit() app.exec()
❝这个PasswordEchoOnEdit其实跟默认的没有太大的区别。
❞
获取、提示、设置文本
displayText 获取除NoEcho以外的文本 text 获取所有文本,包括NoEcho setPlaceholderText 设置占位文本,无法被text或者displayText获取 setText 设置文本
# -*- coding: utf-8 -*- # https://blog.csdn.net/weixin_52040868 # 公众号:测个der # 微信:qing_an_an from PySide6.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton class Edit(QWidget): def __init__(self): super(Edit, self).__init__() self.UI() self.setGeometry(200, 200, 500, 300) self.setWindowTitle("QLineEdit") self.show() def UI(self): self.line = QLineEdit("请输入内容", self) self.btn = QPushButton("获取文本", self) self.btn.setGeometry(50, 120, 200, 30) # /////////////////////////////////////////////// self.label_1 = QLineEdit(self) self.label_1.setGeometry(50, 50, 200, 30) self.label_1.setPlaceholderText("账号") self.btn.clicked.connect(self.txt) def txt(self): print("line text", self.line.text()) print("displayText ", self.label_1.displayText()) print("label_2 text", self.label_1.text()) if __name__ == '__main__': app = QApplication([]) edit = Edit() app.exec()
❝QLineEdit("请输入内容", self)这样的写法就相当于调用了一个setText来写入文本。
❞
限制操作
setMaxLength(length: int) 设置文本最大长度,默认值为32767 setReadOnly(yes: bool) 设置是否开启只读模式,默认为False
from PySide6.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton class Edit(QWidget): def __init__(self): super(Edit, self).__init__() self.UI() self.setGeometry(200, 200, 500, 300) self.setWindowTitle("QLineEdit") self.show() def UI(self): self.label_1 = QLineEdit(self) self.label_1.setGeometry(50, 50, 200, 30) self.label_1.setMaxLength(11) # 设置最大长度为11、 self.label_1.setReadOnly(True) if __name__ == '__main__': app = QApplication([]) edit = Edit() app.exec()
❝限制操作在这里使用的并不算太多,简单的介绍两个即可,值得注意的是只读操作,其实就是设置后不允许用户输入了。
❞
文本框其他好玩的操作
.setClearButtonEnabled(enable: bool) 在编辑器内添加清空按钮 .isClearButtonEnabled() -> bool 是否启用了清空按钮 .setDragEnabled(b: bool) 设置是否允许拖拽,默认不允许
from PySide6.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton class Edit(QWidget): def __init__(self): super(Edit, self).__init__() self.UI() self.setGeometry(200, 200, 500, 300) self.setWindowTitle("QLineEdit") self.show() def UI(self): self.label_1 = QLineEdit(self) self.label_1.setGeometry(50, 50, 200, 30) self.label_1.setPlaceholderText("账号") # 占位文本 self.label_1.setClearButtonEnabled(True) # 在编辑器内添加清空按钮 self.label_1.isClearButtonEnabled() # 是否启用了清空按钮 self.label_1.setDragEnabled(True) # 设置是否允许拖拽 if __name__ == '__main__': app = QApplication([]) edit = Edit() app.exec()
❝上述添加了一个清空按钮,这是它自带的方法,对于其他的自定义的方法操作我们可以自己进行修改,例如隐藏按钮。
❞
验证器、掩码
❝这个用的比较少,还是要提一嘴。也可以用来作为限制来使用。
❞
from PySide6 import QtGui from PySide6.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton class Edit(QWidget): def __init__(self): super(Edit, self).__init__() self.UI() self.setGeometry(200, 200, 500, 300) self.setWindowTitle("QLineEdit") self.show() def UI(self): self.label_1 = QLineEdit(self) self.label_1.setGeometry(50, 50, 200, 30) # 创建一个整数验证器对象,其特点为限制只能输入范围内的整数 validator = QtGui.QIntValidator(10, 99, self.label_1) # 将验证器设置给line_edit self.label_1.setValidator(validator) self.label_2 = QLineEdit(self) self.label_2.setGeometry(50, 90, 200, 30) # 创建掩码,详细语法见文档 ip_address_mask = "000.000.000.000;_" # 适用于IPv4地址的掩码,;后的_为占位符 # 设置输入掩码 self.label_2.setInputMask(ip_address_mask) if __name__ == '__main__': app = QApplication([]) edit = Edit() app.exec()
❝也就只能输入这么多的字符了,再多输入不进去了
❞
案例:自动补全+自定义操作+信号与槽
from PySide6.QtGui import QIcon, QAction from PySide6.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton class Edit(QWidget): def __init__(self): super(Edit, self).__init__() self.UI() self.setGeometry(200, 200, 500, 300) self.setWindowTitle("QLineEdit") self.show() def UI(self): self.user = QLineEdit(self) self.user.setGeometry(50, 50, 200, 30) self.user.setPlaceholderText("账号") self.user.setClearButtonEnabled(True) # 在编辑器内添加清空按钮 self.user.isClearButtonEnabled() # 是否启用了清空按钮 self.user.setDragEnabled(True) # 设置是否允许拖拽 self.pwd = QLineEdit(self) self.pwd.setGeometry(50, 90, 200, 30) self.pwd.setPlaceholderText("密码") action = QAction(self.pwd) action.setIcon(QIcon('close.png')) self.pwd.setClearButtonEnabled(True) # 在编辑器内添加清空按钮 self.pwd.isClearButtonEnabled() # 是否启用了清空按钮 self.tt = QLineEdit(self) self.tt.setGeometry(50, 130, 200, 30) self.tt.setPlaceholderText("显示文本") # 添加密码的明文以及密文的按钮 def change(): # 先判定密码模式 if self.pwd.echoMode() == QLineEdit.EchoMode.Normal: # 变成密文 self.pwd.setEchoMode(QLineEdit.EchoMode.Password) # 切换图标 action.setIcon(QIcon('close.png')) else: # 变成明文 self.pwd.setEchoMode(QLineEdit.EchoMode.Normal) # 改变图标 action.setIcon(QIcon('open.png')) action.triggered.connect(change) # 将图标放在头部 # self.pwd.addAction(action, QLineEdit.LeadingPosition) # 将图标放在尾部 self.pwd.addAction(action,QLineEdit.TrailingPosition) """信号与槽,以下代码需要单个分开来使用,因为都是作用于同一个槽函数""" # 当编辑器中的文本发生改变时发射此信号,新的文本作为参数传出 self.user.textChanged.connect(self.writeTxt) # 当编辑器中的文本被用户编辑时发射此信号,新的文本作为参数传出,编程方式改变文本无效 # self.user.textEdited.connect(self.writeTxt) # 当光标位置变化时发射此信号,传出旧新光标位置 # self.user.cursorPositionChanged.connect(lambda old, new: self.writeTxt(f"光标由{old}移动到了{new}")) # 当选中状态改变时发射此信号,可以通过.selectedText()等方法获取新的选中 # self.user.selectionChanged.connect(lambda :self.writeTxt("选择改变了")) # 当用户按下Enter / Return键时发射此信号,当设置了掩码或验证器时只有接受输入才发射 # self.user.returnPressed.connect(lambda :self.writeTxt("按下了回车")) # editingFinished()按下Enter / Return键、编辑器失去焦点且内容变化时发射此信号 # self.user.editingFinished.connect(lambda: self.writeTxt("结束编辑")) # inputRejected()当用户输入被验证器拒绝时发射此信号 # self.user.setValidator(QtGui.QIntValidator(10, 99, self.user)) # 设置验证器 # self.user.inputRejected.connect(lambda: self.writeTxt("输入拒绝")) def writeTxt(self, txt): self.tt.setText(txt) if __name__ == '__main__': app = QApplication([]) edit = Edit() app.exec()
最后文中的所有代码在gitee上: https://gitee.com/qinganan_admin/Pyside6_Information/tree/master/%E7%AC%AC%E4%B8%89%E7%AB%A0%EF%BC%8CQLineEdit