单行文本控件QLineEdit
图形界面上需要输入信息,与程序进行沟通,输人数据信息的控件有单行文本控件、多行文本控件数值输人控件。单行文本输入控件是QLineEdit,继承自QWidget。
可视化应用程序需要在界面上输入数据和显示数据。QLineEdit 控件是单行文本编辑器.用于接收用户输入的字符串数据,并显示字符串数据,输人的整数和浮点数也会当作字符串数据。
可以利用int()和 float()函数将字符串型整数和浮点数转换成整数和浮点数
用QLineEdit类创建单行文本控件的方法如下其中parent是QLineEdit 所在的窗口或容器类控件,text 是显示的文字。
from PySide6.QtWidgets import QLineEdit
QLineEdit(text: str,parent: Union[PySide6.QtWidgets.QWidget,NoneType]=None)-> None
QLineEdit(parent: Union[PySide6.QtWidgets.QWidget,NoneType]=None)-> None
单行文本控件QLineEdit 的常用方法
QLineEdit 控件可以用于密码输人,可以进行复制粘贴、删除等操作。单行文本控件QLineEdit 的常用方法如表所示
主要方法介绍
QLineEdit的方法及参数类型 | 返回值的类型 | 说明 |
---|---|---|
[slot]setText(str) | None | 设置文本内容 |
insert(str) | None | 在光标处插人文本 |
text() | str | 获取真实文本,而不是显示的文本 |
displayText() | str | 获取显示的文本 |
setMask(QBitmap) | None | 设置遮掩图像 |
setModified(bool) | None | 设置文本更改状态 |
setPlaceholderText(str) | None | 设置占位符 |
placeholderText() | str | 获取占位符 |
setClearButtonEnabled(bool) | None: | 设置是否有清空按钮 |
isClearButtonEnabled() | bool | 获取是否有清空按钮 |
setMaxLength(int) | None | 设置文本的最大长度 |
maxLength() | int | 获取文本的最大长度 |
setReadOnly(bool) | None | 设置只读模式,只能显示,不能输人 |
setAlignment(Q1.Alignment) | None | 设置对齐方式 |
setFrame(bool) | None | 设置是否显示外框 |
backspace() | None | 删除光标左侧或选中的文字 |
isModified() | bool | 获取文本是否被更政 |
isReadOnly() | bool | 获取是否只读模式 |
del() | None | 删除光标右侧或选中的文字 |
[slot]clear() | None | 删除所有内容 |
[slot]copy() | None | 复制选中的文本 |
[slot]cut() | None | 剪切选中的文字 |
[slot]paste() | None | 粘贴文字 |
isUndoAvailable() | bool | 是否可以撤销操作 |
[slot]undo() | None | 撤销操作 |
isRedoAvailable() | None | 是否可以恢复撤销操作 |
[slot]redo() | None | 恢复撤销操作 |
setDragEnabled(bool) | None | 设置文本是否可以拖放 |
setEchoMode(QLineEdit.EchoMode) | None | 设置显示模式 |
setTextMargins(QMargins) | None | 设置文本区域到外框的距离 |
setCompleter(QCompleter) | None | 设置辅助补全的内容 |
-
由于单行文本控件可以用于输入密码,其显示的内容并不一定是输人的内容。用setText(str)方法设置文本内容,
- 用text)方法获取真实的文本而不是界面上显示的文本,例如在密码输人模式下,得到的是输人的密码,而不是界面上显示的掩码
- 用displayText()方法获取显示的文本内容。
-
用setEchoMode(QLineEdit.EchoMode)方法可以设置成密码输入方式,其中QLineEditEchoMode的取值是枚举类型,可以设置的值如表所示
QLineEdit.EchoMode的取值 值 说 明 QLineEdit.Normal 0 正常显示输入的字符,这是默认值 QLineEdit.NoEcho 1 输入文字时不显示任何输入,文字内容和个数都不可见,常用于密码保护 i QLineEdit.Password 2 显示密码掩码,不显示实际输入的字符,能显示字符个数 OLineEdit.PasswordEchoOnEdit 3 在编辑的时候显示字符,不编辑的时候显示掩码 -
setPlaceholderText()是在 QLineEdit 中灰色显示的字符常用于提示信息,例如setPlaceholderText(“请输人密码”)。当输人真实文字时,不再显示提示信息。
-
QLineEdit 中输人的数据有时只能为整数,有时只能为点数,这时就需要对输人的数据进行合法性检验。
-
QLineEdit 的合法性检验用setValidator(QValidator)方法它的参数是一个QValidator类,QValidator 类用来检查输人内容的合法性,当输人内容合法时,才能成功输人并在输人框中显示。
from PySide6.QtGui import QValidator,QIntValidator,QDoubleValidator,QRegularExpressionValidator QValidator(self,parent: Union[PySide6.QtCore.QObject,NoneType] = None)-> None QIntValidator(bottom: int,top: int,parent: Union[PySide6.QtCore.QObject,NoneType] = None)-> None QIntValidator(parent: Union[PySide6.QtCore.QObject,NoneType] = None)-> None QDoubleValidator(bottom: float,top: float,decimals: int,parent: Union[PySide6.QtCore.QObject,NoneType] = None)-> None QDoubleValidator(parent: Union[PySide6.QtCore.QObject,NoneType] = None)-> None QRegularExpressionValidator(parent: Union[PySide6.QtCore.QObject,NoneType] = None)-> None QRegularExpressionValidator(re: Union[PySide6.QtCore.QRegularExpression,str],parent: Union[PySide6.QtCore.QObject,NoneType] = None)-> None
-
QValidator 是一个抽象类可利用其子类QIntValidator,QDoubleValidator分别用来设置合法整数和合法浮点数,还有一个子类QRegularExpressionValidator结合正则表达式来判断输人的合法性。
-
可重写QValidator 并实现 验证方法
validate(self,input_text: str,pos_int: int)
,以及选择实现自动修正方法fixup(self,arg__1: str)
来自定义 -
QIntValidator 设置整数范围的下限和上限,其使用方法是QIntValidator(int,int,parent=None),其中第1个int是下限,第2个int是上限;
- 用QIntValidator的setRange(int,int)、setbottom(int)和 setTop(int)方法来设置下限和上限,
- 例如 QLineEdit.setValidator(QIntValidator(0,100))可以设置 QLineEdit 只能输人0到100的整数。
-
QDoubleValidator
- 使用方法是 QDoubleValidator(float,float,int,parent=None),其中第 1个float 参数是下限第2个at 参数是上限int 是小数的位数
- 同样也可通过 setRange(float,float,int)、setbottom(float)、setTop(float)和setDecimals(int)方法来设置下限、上限和小数位数。
- 使用方法是 QDoubleValidator(float,float,int,parent=None),其中第 1个float 参数是下限第2个at 参数是上限int 是小数的位数
-
QRegexpValidator:检查输入是否符合正则表达式
- 常用正则参考
-
-
-
-
在QLineEdit 中输入数据时,可以有辅助性的提示信息帮助快速完成输入
-
用setCompleter(QCompleter)方法设置辅助补全的内容,其中QCompleter 是辅助补全的类。
- 创建辅助补全的方法为 QCompleter(cornpletions:Sequence[str],parent:QObject=None) QCompleter(model: QAbstractItemModel,parent; QObject=None) QCompleter(parent: QObject]=None) 用QCompleter 的 setModel(QAbstractItemModel)方法设置数据模型有关数据模型的内容参见第5章。 - 用setCompletionMode(mode:QCompleter,CompletionMode)方法设置模式,其中枚举类型QCompleter.CompletionMode可以取: - QCompleter,PopupCompletion(弹窗模式) - QCompleter.InlineCompletion(输框内选中模式) - QCompleter.UnfilteredPopupCompletion(以弹窗模式列出所有可能的选项) 用代码在QLineEdit 中插人文字或选择文字时,需要定位光标的位置,获取或移动光标的方法如表所示。 | QLineEdit的光标方法 | 说明 | | --------------------------------- | --------------------------------------------- | | cursorBackward(mark=True,steps=1) | 向左移动step个字符,mark为True时带选中效果 | | cursorForward(mark=True,steps=1) | 向右移动step个字符,mark为True时带选中效果 | | cursorWordBackward(mark=True) | 向左移动一个单词的长度,mark为True时带选中效果 | | cursorWordForward(mark=True) | 向右移动一个单词的长度,mark为True时带选中效果 | | home(mark=True) | 光标移动至行首,mark为True时带选中效果 | | end(mark=True) | 光标移动至行尾,mark为True时带选中效果 | | setCursorPosition(int) | 光标移动至指定位置 | | cursorPosition() | 获取光标位萱,返回值是int | | cursorPositionAt(OPoint) | 获取指定位置处光标位置,返回值是int |
-
-
对 QLineEdit 中的文本可以进行复制粘贴删除等操作,一般都需要先选择文本然后再操作。选择文本的方法如表所示。
文本选择方法 说明 setSelection(int,int) 选择指定范围内的文本 [slot]selectAll() 选择所有的文本 deselect() 取消选择 hasselectedText() 是否有选择的文本 selectionLength() 获取选择的文本的长度 selectionStart() 获取选择的文本的起始位置 selectionEnd() 获取选择的文本的终止位置 selectedText() 获取选择的文本 -
对于需要输人固定格式的文本,例如 IP 地址、MAC 地址License 序列号,可以用setInputMask()方法来定义这种固定的格式。
-
例如 setInputMask(“000.000.000.000”)和setInputMask(“000.000.000.000;_”)方法都可以输人IP地址。后者在未输入字符的位置用下划线来表示空位;
-
setInputMask(“HH:HH:HH:HH:HH:HH”)和 setInputMask(“HH,HH:HH:HH:HH:HH;”)方法都可以输MAC地址;
-
setInputMask(“0000-00-00”)方法可以输入ISO标准格式日期,
-
setInputMask(“>AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#”)方法可以用于输人 License 序列号,所有字母转换为大写。可以用于格式化输入的字符如表所示
字符 含义 A
ASCI字母是必需的,取值范围为A2、az a
ASCI字母是允许的,但不是必需的 N
ASCII字母和数字是必需的,取值范围为AZ,az,0-9 n
ASCI字母和数字是允许的,但不是必需的 X
任何字符都是必需的 x
任何字符都是允许的,但不是必需的 9
ASCI数字是必需的,取值范围为0~9 0
ASCII数字是允许的,但不是必需的 D
ASCII数字是必需的,取值范围为1-9 d
ASCII数字是允许的,但不是必需的,取值范围为1~9 #
ASCII数字或加/减符号是允许的,但不是必需的 H
十六进制数据字符是必需的,取值范围为AF、af,0-9 h
十六进制数据字符是允许的,但不是必需的 B
二进制数据字符是必需的,取值为0、1 b
二进制数据字符是允许的,但不是必需的 >
所有的字符字母都大写 <
所有的字符字母都小写 !
关闭大小写转换 \
使用\去转义上述列出的特殊字符 ;c
终止输入遮掩,并把空余输入设置成c
-
文本的设置和获取
- setText(str)设置内容文本
- insert(newText)在光标处插入文本
- text()获取真实内容文本
- displayText()获取用户能看到的内容文本
输出模式
- setEchoMode(QLineEdit.EchoMode)
- QLineEdit.EchoMode
- NoEcho=1 不输出
- Normal=0 正常输出
- Password=2 密文形式
- PasswordEchoOnEdit=3 编辑时明文,结束后密文
- QLineEdit.EchoMode
- echoMode()-> QLineEdit.EchoMode 获取输出模式
灰色输入提示字符串(占位文本)
- setPlaceholderText(notice_str)设置灰色提示字符串
- placeholderText()获取灰色提示字符串
清空按钮显示
用作快速清空文本框内容,实现快速清空已输入信息
- setClearButtonEnabled(bool)设置是否添加清空
- isClearButtonEnabled()-> bool 是否添加清空
添加操作行为
常用于用于密码输入框的明文密文输入切换。
- addAction(QAction,QLineEdit.ActionPosition)
- QLineEdit.ActionPosition 添加动作放的位置
- QLineEdit.LeadingPosition 搁前面
- QLineEdit.TrailingPosition 搁后面
- QLineEdit.ActionPosition 添加动作放的位置
- addAction(QIcon,QLineEdit.ActionPosition)-> QAction 添加动作,同菜单的addAction方法
自动补全
设置当输入部分文文本下拉框提示完整文本,类似于QQ登录时输入登录账号不需要输入完整账号名称就提示历史已输入账号名称
-
setCompleter(QCompleter)设置完成器
-
completer()-> QCompleter 完成器对象
-
导入:
from PySide6.QtWidgets import QCompleter
-
实例化:
-
QCompleter(completions: Sequence[str],parent: Union[PySide6.QtCore.QObject,NoneType]=None)-> None QCompleter(model: PySide6.QtCore.QAbstractItemModel,parent: Union[PySide6.QtCore.QObject,NoneType]=None)-> None QCompleter(parent: Union[PySide6.QtCore.QObject,NoneType]=None)-> None
-
-
例子:
import sys from PySide6.QtWidgets import QApplication,QWidget,QLabel,QLineEdit,QCompleter class win_demo(QWidget): def __init__(self,parent=None): super().__init__(parent) self.set_windows() self.business_demo() def set_windows(self): self.resize(300,300)# 设置窗口大小 self.setWindowTitle("hello world")# 设置窗口标题 def business_demo(self): line_edit=QLineEdit(self) # 创建完成器对象,第一个参数需要用字符串即使输入的是数字 completer=QCompleter(["123","234","235","345","356","456","457","1234"],self) # 设置完成其 line_edit.setCompleter(completer) if __name__=='__main__': app=QApplication(sys.argv) win=win_demo() win.show() sys.exit(app.exec())
-
输入限制
限制用户在文本框中输入的内容
-
内容长度限制
- setMaxLength(int)设置限制输入的最大长度
- maxLength()获取输入最大长度
-
只读限制
- setReadOnly(bool)
- isReadOnly()
-
规则验证
setValidator(QValidator)设置验证器
- QValidator 验证器 用于验证用户输入数据的合法性,下面单独说明 - setInputMask(mask_str)掩码验证
-
判定输入文本是否通过验证
- hasAcceptableInput()
QValidator验证器
如果一个输入框设置了验证器,用户在文本框中输入内容时,首先会将内容传递给验证器验证方法(validate)进行验证:validate(self,input_text,pos)
如果输入框结束输入后,上述的验证状态并非有效,则会调用修复方法fixup(self,input_text)
- return 修正后文本,
- 返回修正后的的文本还会再次调用validate验证
- return QValidator.State.Acceptable,input_text,pos_int #验证通过
- return QValidator.State.Intermediate,input_text,pos_int #暂不作判定是否通过验证,用于输入过渡时不做判断
- return QValidator.State.Invalid,input_text,pos_int #验证不通过
是一个抽象类,使用前需要进行子类化操作
-
自定义子类
- 需要实现validate方法
- 修复方法fixup可以根据需要选择是否进行实现,当validate验证不通过时会把输入字符传给fixup进行修复。
-
系统提供子类
from PySide6.QtGui import QValidator,QIntValidator,QDoubleValidator,QRegularExpressionValidator QValidator(self,parent: Union[PySide6.QtCore.QObject,NoneType] = None)-> None QIntValidator(bottom: int,top: int,parent: Union[PySide6.QtCore.QObject,NoneType] = None)-> None QIntValidator(parent: Union[PySide6.QtCore.QObject,NoneType] = None)-> None QDoubleValidator(bottom: float,top: float,decimals: int,parent: Union[PySide6.QtCore.QObject,NoneType] = None)-> None QDoubleValidator(parent: Union[PySide6.QtCore.QObject,NoneType] = None)-> None QRegularExpressionValidator(parent: Union[PySide6.QtCore.QObject,NoneType] = None)-> None QRegularExpressionValidator(re: Union[PySide6.QtCore.QRegularExpression,str],parent: Union[PySide6.QtCore.QObject,NoneType] = None)-> None
- QIntValidator(bottom,top,parent)限制整型数据范围
- QDoubleValidator 浮点类型数据限制范围 经测试,无效 需要手动实现
- QRegExpValidator 通过正则表达式限定
例子:
import sys
from PySide6.QtGui import QValidator
from PySide6.QtWidgets import QApplication,QWidget,QLabel,QLineEdit,QCompleter
class IntValidator60(QValidator):
"""验证输入整数且60-80"""
def validate(self,input_text: str,pos_int: int)-> object:
"""验证方法"""
try:
if input_text=="":
return QValidator.State.Intermediate,input_text,pos_int # 暂不作判定是否通过验证
# return QValidator.State.Acceptable,input_text,pos_int # 验证通过
elif 1 <=int(input_text)<=17:
return QValidator.State.Intermediate,input_text,pos_int # 暂不作判定是否通过验证
elif any([80 > int(input_text),int(input_text)> 180]):
return QValidator.State.Invalid,input_text,pos_int # 验证不通过
else:
return QValidator.State.Acceptable,input_text,pos_int # 验证通过
except(ValueError,BaseException):
return QValidator.State.Invalid,input_text,pos_int # 验证不通过
def fixup(self,arg__1: str)-> str:
"""修复方法"""
print(f"修复方法传入{arg__1},验证不通过,但是强制修复通过了")
return"100"
class IntValidator30(QValidator):
"""验证输入整数且30-40"""
def validate(self,input_text: str,pos_int: int)-> object:
"""验证方法"""
try:
if input_text in["3",""]:
return QValidator.State.Intermediate,input_text,pos_int # 暂不作判定是否通过验证
elif input_text=="":
return QValidator.State.Acceptable,input_text,pos_int # 验证通过
elif any([40 < int(input_text),int(input_text)< 10]):
return QValidator.State.Invalid,input_text,pos_int # 验证不通过
else:
return QValidator.State.Acceptable,input_text,pos_int # 验证通过
except(ValueError,BaseException):
return QValidator.State.Invalid,input_text,pos_int # 验证不通过
class win_demo(QWidget):
def __init__(self,parent=None):
super().__init__(parent)
self.set_windows()
self.business_demo()
def set_windows(self):
self.resize(300,300)# 设置窗口大小
self.setWindowTitle("hello world")# 设置窗口标题
def business_demo(self):
line_60_180=QLineEdit(self)
line_60_180.setPlaceholderText("输入60-180,有修复方法")
line_30_40=QLineEdit(self)
line_30_40.setPlaceholderText("输入30-40,无修复方法")
line_30_40.move(0,line_60_180.height())
# 设置验证器
line_60_180.setValidator(IntValidator60())
line_30_40.setValidator(IntValidator30())
if __name__=='__main__':
app=QApplication(sys.argv)
win=win_demo()
win.show()
sys.exit(app.exec())
是否被编辑
标识文本内容是否被修改过
- isModified()获取文本是否原始状态(一般为空白)
- setModified(bool)设置当前为原始状态(即使修改过内容也会更改状态,但不会修改文本)
光标控制
控制光标,以及文本选中操作
- cursorBackward(mark:bool,steps :int=1)向后(左)移动steps个字符
- mark: bool 是否带选中效果
- cursorForward(mark:bool,steps :int=1)向前(右)移动steps个字符
- mark: True 是否带选中效果
- cursorWordBackward(bool mark)向后(左)移动一个单词长度(以空格为间隔)
- mark: True 是否带选中效果
- cursorWordForward(bool mark)向前(右)移动一个单词长度(以空格为间隔)
- mark: True 是否带选中效果
- home(bool)移动到行首
- bool标识是否带选中效果
- end(bool)移动到行尾
- bool标识是否带选中效果
- setCursorPosition(int)设置光标位置
- cursorPosition()获取光标位置
- cursorPositionAt(pos: PySide6.QtCore.QPoint)获取指定坐标位置对应文本光标位置
文本边距设置
实际作用是在指定空间内 左右调整输入区域,上下以中心为原点调整文字位置
- setTextMargins(left: int,top: int,right: int,bottom: int)设置文本内容边距
- getTextMargins()获取文本内容边距
对齐方式
设置用户输入的内容文本对齐方式
setAlignment(Qt.Alignment)设置输入文本的对齐方式
可通过|
连接水平和垂直参数同时设置两个方向对齐方式。
- Qt.Alignment
- 水平方向
- Qt.AlignLeft
- Qt.AlignRight
- Qt.AlignHCenter
- Qt.AlignJustify 自适应
- 垂直方向
- Qt.AlignTop
- Qt.Alignbottom
- Qt.AlignVCenter
- Qt.AlignBaseline
- 居中对齐
- Qt.AlignCenter 垂直和水平都居中,等同于 Qt.AlignHCenter | Qt.AlignVCenter
- 水平方向
常用编辑功能
方法 | 说明 |
---|---|
backspace() | 退格,删除选中文本(如果有)或删除光标左侧一个字符 |
del_() | 删除选中文本(如果有)或删除光标右侧一个字符 |
clear() | 清空,删除所有文本框内容 |
copy() | 复制选中文本 |
cut() | 剪切选中文本 |
paste() | 粘贴已复制文本 |
isUndoAvailable()-> bool | 判断当前是否可以撤销 |
undo() | 撤消 |
isRedoAvailable()-> bool | 判断当前是否可以重做 |
redo() | 重做 |
setDragEnabled(bool) | 设置选中文本后是否可以拖拽到其他位置 |
setSelection(start_pos,length) | 选中指定区间的文本 |
setSelection(start_pos,length) | 选中指定区间的文本 |
selectAll() | 选中所有文本 |
deselect() | 取消选中已选择文本 |
hasSelectedText() | 是否有选中文本 |
selectedText()-> str | 获取选中的文本 |
selectionStart()-> int | 选中的开始位置 |
selectionEnd()-> int | 选中的结束位置 |
selectionLength()-> int | 选中的长度 |
单行文本控件QLineEdit 的信号
QLineDdit 的信号及参数类型 | 说 明 |
---|---|
textEdited(tex: str) | 文本被编辑时发送信号,不适用setText()方法引起的文本改变 |
textChanged(text: str) | 文本发生变化时发送信号,包括setIext()方法引起的文本改变 |
returnPressed() | 按 Enter键时发送信号 |
editingfinished() | 按 Enter或失去焦点时发送信号 |
cursorPostionChanged(oldPosr int,newPos: int) | 光标位置发生变化时发送信号,第1个参数是光标原位置,第2个参 数是光标移动后的位置 |
selectionChanged) | 选中的文本发生变化时发送信号 |
inputRejectedO | 拒绝输入时发送信号 |
单行文本控件QLineEdit的应用实例
下面的程序建立一个学牛考试成绩查询的界面如图所示。在界面中输人名和准考证号,单击"查询"按钮,可以显示查找的学生成绩,如果查不到,会显示"查无此人",单击"清空"按钮删除输入的姓名、准考证号和查询到的成绩。
from PySide6.QtWidgets import QApplication,QWidget,QPushButton,QLabel,QLineEdit
from PySide6.QtGui import QFont,QIntValidator
from PySide6.QtCore import QRect
import sys
class MyWidget(QWidget):
def __init__(self,parent=None):
super().__init__(parent)
self.setWindowTitle("生成绩查询系统")
self.setGeometry(400,200,480,370)
self.setupUi()
self.__data=[[202003,'没头脑',89,88,93,87],
[202002,'不高兴',80,71,88,98],
[202004,'倒惩蛋',95,92,88,94],
[202001,"鸭梨头",93,84,84,77],
[202005,"墙头草",93,86,73,86]] # 学生信息和成绩,可从文件读取
def setupUi(self): # 创建界面上的控件
self.label_1=QLabel(self)
self.label_1.setGeometry(QRect(120,40,231,31))
font=QFont("楷体",pointSize=20)
self.label_1.setFont(font)
self.label_1.setText("学生考试成绩查询")
self.label_2=QLabel(self)
self.label_2.setGeometry(QRect(113,130,60,20))
self.label_2.setText("姓名(&N);")
self.label_3=QLabel(self)
self.label_3.setGeometry(QRect(100,160,70,20))
self.label_3.setText("准考证号(&T)")
self.label_4=QLabel(self)
self.label_4.setGeometry(QRect(100,260,100,20))
self.label_4.setText("查询结果如下;")
self.lineEdit_name=QLineEdit(self)
self.lineEdit_name.setGeometry(QRect(190,130,113,20))
self.lineEdit_name.setClearButtonEnabled(True)
# 设置"清空"按钮
self.lineEdit_number=QLineEdit(self)
self.lineEdit_number.setGeometry(QRect(190,160,113,20))
self.lineEdit_number.setValidator(QIntValidator(202001,202100))# 设置验证
self.lineEdit_number.setEchoMode(QLineEdit.EchoMode.Password)# 设置密码形式
self.lineEdit_number.setClearButtonEnabled(True)# 设置"清空"按钮
self.lineEdit_results=QLineEdit(self)
self.lineEdit_results.setGeometry(QRect(70,300,321,20))
self.lineEdit_results.setReadOnly(True)# 设置只读属性
self.label_2.setBuddy(self.lineEdit_name)# 伙伴关系
self.label_3.setBuddy(self.lineEdit_number)# 伙伴关系
self.btn_enquire=QPushButton(self)
self.btn_enquire.setGeometry(QRect(150,210,75,23))
self.btn_enquire.setText("查询(&E)")
self.btn_enquire.clicked.connect(self.inquire)# 信号与槽的连接
self.btnClear=QPushButton(self)
self.btnClear.setGeometry(QRect(240,210,81,23))
self.btnClear.setText("清空(&C)")
self.btnClear.clicked.connect(self.lineEdit_name.clear)# 信号与槽的连接
self.btnClear.clicked.connect(self.lineEdit_number.clear)# 信号与槽的连接
self.btnClear.clicked.connect(self.lineEdit_results.clear)# 信号与槽的连接
self.lineEdit_name.textChanged.connect(self.text_changed)# 信号与槽的连接
self.lineEdit_number.textChanged.connect(self.text_changed)# 信号与槽的连接
self.text_changed()
def inquire(self):
number=int(self.lineEdit_number.text())
template="{}的考试成绩:语文{} 数学{} 英语{} 物理{}"
for i in range(len(self.__data)):
stu=self.__data[i]
if stu[0]==number and stu[1]==self.lineEdit_name.text():
self.lineEdit_results.setText(template.format(stu[1],stu[2],stu[3],stu[4],stu[5]))
break
else:
if i==len(self.__data)- 1:
self.lineEdit_results.setText("查无此人")
def text_changed(self):
if self.lineEdit_number.text()!=""and self.lineEdit_name.text()!="":
self.btn_enquire.setEnabled(True)
else:
self.btn_enquire.setEnabled(False)
if self.lineEdit_number.text()!=""or self.lineEdit_name.text()!="":
self.btnClear.setEnabled(True)
else:
self.btnClear.setEnabled(False)
if __name__=='__main__':
app=QApplication(sys.argv)
win=MyWidget()
win.show()
sys.exit(app.exec())