PyQt QLineEdit
最后修改于 2023 年 8 月 24 日
在本文中,我们将展示如何在 PyQt 中使用工具提示。
访问 PyQt6 教程,或列出所有 PyQt 教程。
,阅读QLineEdit
QLineEdit
允许用户输入和编辑单行纯文本。它具有一系列有用的编辑功能,包括撤销和重做、剪切和粘贴以及拖放。
当文本改变时,会发出 textChanged
信号;
PyQt QLineEdit textChanged
下面是一个使用 QLineEdit
的简单示例。
#!/usr/bin/python import sys from PyQt6.QtWidgets import (QApplication, QLabel, QLineEdit, QVBoxLayout, QWidget) class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): hbox = QVBoxLayout(self) self.lbl = QLabel(self) qle = QLineEdit(self) qle.textChanged[str].connect(self.onChanged) hbox.addWidget(self.lbl) hbox.addSpacing(20) hbox.addWidget(qle) self.setGeometry(400, 400, 350, 300) self.setWindowTitle('QLineEdit') self.show() def onChanged(self, text): self.lbl.setText(text) self.lbl.adjustSize() def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()
这个示例展示了一个行编辑部件和一个标签。我们在行编辑器中输入的文本会立即显示在标签部件中。
qle = QLineEdit(self)
创建 QLineEdit
部件。
qle.textChanged[str].connect(self.onChanged)
如果行编辑部件中的文本发生变化,我们调用 onChanged
方法。
def onChanged(self, text): self.lbl.setText(text) self.lbl.adjustSize()
在 onChanged
方法内部,我们将输入的文本设置到标签部件。我们调用 adjustSize
方法来根据文本的长度调整标签的大小。
QLineEdit 对齐文本
部件的文本可以使用 setAlignment
进行对齐。
#!/usr/bin/python import sys from PyQt6.QtCore import Qt from PyQt6.QtWidgets import (QApplication, QComboBox, QHBoxLayout, QLineEdit, QWidget) class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): hbox = QHBoxLayout() combo = QComboBox(self) combo.addItem('Left') combo.addItem('Center') combo.addItem('Right') combo.activated.connect(self.onActivated) self.qle = QLineEdit(self) hbox.addWidget(combo) hbox.setSpacing(20) hbox.addWidget(self.qle) self.setLayout(hbox) self.setWindowTitle('Text alignment') self.show() def onActivated(self, idx): align = [Qt.AlignmentFlag.AlignLeft, Qt.AlignmentFlag.AlignCenter, Qt.AlignmentFlag.AlignRight] self.qle.setAlignment(align[idx]) def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()
该示例包含一个带有三个选项的 QComboBox
;这些选项将相邻 QLineEdit
中的文本向左、居中或向右对齐。
def onActivated(self, idx): align = [Qt.AlignmentFlag.AlignLeft, Qt.AlignmentFlag.AlignCenter, Qt.AlignmentFlag.AlignRight] self.qle.setAlignment(align[idx])
在 onActivated
回调中,我们使用 setAlignment
设置行编辑部件的对齐方式。

QLineEdit 回显模式
回显模式决定了在行编辑器中输入的文本如何向用户显示。在默认的 Normal
模式下,输入的文本会按原样显示。其他模式,包括 Password
和 PasswordEchoOnEdit
,会抑制或隐藏文本。
#!/usr/bin/python import sys from PyQt6.QtWidgets import (QWidget, QComboBox, QPushButton, QLineEdit, QHBoxLayout, QApplication, QMessageBox) class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): hbox = QHBoxLayout() combo = QComboBox(self) combo.addItem('Normal') combo.addItem('Password') combo.addItem('PasswordEchoOnEdit') combo.addItem('NoEcho') combo.activated.connect(self.onActivated) self.qle = QLineEdit(self) showBtn = QPushButton('Show', self) showBtn.clicked.connect(self.onClicked) hbox.addWidget(combo) hbox.setSpacing(20) hbox.addWidget(self.qle) hbox.setSpacing(20) hbox.addWidget(showBtn) self.setLayout(hbox) self.setWindowTitle('Echo mode') self.show() def onActivated(self, idx): modes = [QLineEdit.EchoMode.Normal, QLineEdit.EchoMode.Password, QLineEdit.EchoMode.PasswordEchoOnEdit, QLineEdit.EchoMode.NoEcho] self.qle.setEchoMode(modes[idx]) def onClicked(self): text = self.qle.text() QMessageBox.information(self, 'info', text) def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()
在这个示例中,我们可以使用 QComboBox
来选择回显模式。
def onActivated(self, idx): modes = [QLineEdit.EchoMode.Normal, QLineEdit.EchoMode.Password, QLineEdit.EchoMode.PasswordEchoOnEdit, QLineEdit.EchoMode.NoEcho] self.qle.setEchoMode(modes[idx])
回显模式通过 setEchoMode
设置。

QLineEdit 文本验证
我们可以使用验证器来验证输入文本。
#!/usr/bin/python import sys from PyQt6.QtWidgets import (QWidget, QLabel, QLineEdit, QSizePolicy, QHBoxLayout, QApplication) from PyQt6.QtGui import QPalette, QColor, QRegularExpressionValidator from PyQt6.QtCore import QRegularExpression class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): hbox = QHBoxLayout() label = QLabel('HEX colour:', self) rx = QRegularExpression("[0-9A-Fa-f]{6}") self.qle = QLineEdit(self) validator = QRegularExpressionValidator(rx) self.qle.setValidator(validator) self.qle.editingFinished.connect(self.onEditingFinished) self.colLabel = QLabel(self) self.colLabel.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) self.colLabel.setAutoFillBackground(True) hbox.addWidget(label) hbox.addSpacing(20) hbox.addWidget(self.qle) hbox.addSpacing(20) hbox.addWidget(self.colLabel) pal = QPalette() pal.setColor(QPalette.ColorRole.Window, QColor('#333333')) self.colLabel.setPalette(pal) self.setLayout(hbox) self.resize(450, 200) self.setWindowTitle('Validator') self.show() def onEditingFinished(self): pal = QPalette() pal.setColor(QPalette.ColorRole.Window, QColor(f'#{self.qle.text()}')) self.colLabel.setPalette(pal) def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()
在这个示例中,我们有一个用于验证十六进制格式颜色值(例如 #33fe56)的验证器。输入的颜色将用作 QLabel
部件的背景。
self.qle = QLineEdit(self) validator = QRegularExpressionValidator(rx) self.qle.setValidator(validator)
我们使用 QRegularExpressionValidator
,它根据正则表达式验证字符串。该正则表达式指定了允许的字符,并用量词设置了固定长度。验证器通过 setValidator
应用。
self.qle.editingFinished.connect(self.onEditingFinished)
当按下回车键或行编辑器失去焦点时,会发出 editingFinished
信号。只有在验证器通过时才会发出此信号。
def onEditingFinished(self): pal = QPalette() pal.setColor(QPalette.ColorRole.Window, QColor(f'#{self.qle.text()}')) self.colLabel.setPalette(pal)
所选颜色将应用于标签。

QLineEdit 自动补全
可以使用 setCompleter
提供自动补全功能。
#!/usr/bin/python import sys from PyQt6.QtWidgets import (QWidget, QLabel, QCompleter, QLineEdit, QHBoxLayout, QApplication) data = [ 'Afghanistan', 'Albania', 'Algeria', 'Andorra', 'Angola', 'Antigua & Deps', 'Argentina', 'Armenia', 'Australia', 'Austria', 'Azerbaijan', 'Bahamas', 'Bahrain', 'Bangladesh', 'Barbados', 'Belarus', 'Belgium', 'Belize', 'Benin', 'Bhutan', 'Bolivia', 'Bosnia Herzegovina', 'Botswana', 'Brazil', 'Brunei', 'Bulgaria', 'Burkina', 'Burundi', 'Cambodia', 'Cameroon', 'Canada', 'Cape Verde', 'Central African Rep', 'Chad', 'Chile', 'China', 'Colombia', 'Comoros', 'Congo', 'Congo {Democratic Rep}', 'Costa Rica', 'Croatia', 'Cuba', 'Cyprus', 'Czech Republic', 'Denmark', 'Djibouti', 'Dominica', 'Dominican Republic', 'East Timor', 'Ecuador', 'Egypt', 'El Salvador', 'Equatorial Guinea', 'Eritrea', 'Estonia', 'Ethiopia', 'Fiji', 'Finland', 'France', 'Gabon', 'Gambia', 'Georgia', 'Germany', 'Ghana', 'Greece', 'Grenada', 'Guatemala', 'Guinea', 'Guinea-Bissau', 'Guyana', 'Haiti', 'Honduras', 'Hungary', 'Iceland', 'India', 'Indonesia', 'Iran', 'Iraq', 'Ireland', 'Israel', 'Italy', 'Ivory Coast', 'Jamaica', 'Japan', 'Jordan', 'Kazakhstan', 'Kenya', 'Kiribati', 'Korea North', 'Korea South', 'Kosovo', 'Kuwait', 'Kyrgyzstan', 'Laos', 'Latvia', 'Lebanon', 'Lesotho', 'Liberia', 'Libya', 'Liechtenstein', 'Lithuania', 'Luxembourg', 'Macedonia', 'Madagascar', 'Malawi', 'Malaysia', 'Maldives', 'Mali', 'Malta', 'Marshall Islands', 'Mauritania', 'Mauritius', 'Mexico', 'Micronesia', 'Moldova', 'Monaco', 'Mongolia', 'Montenegro', 'Morocco', 'Mozambique', 'Myanmar', 'Namibia', 'Nauru', 'Nepal', 'Netherlands', 'New Zealand', 'Nicaragua', 'Niger', 'Nigeria', 'Norway', 'Oman', 'Pakistan', 'Palau', 'Panama', 'Papua New Guinea', 'Paraguay', 'Peru', 'Philippines', 'Poland', 'Portugal', 'Qatar', 'Romania', 'Russian Federation', 'Rwanda', 'St Kitts & Nevis', 'St Lucia', 'Saint Vincent & the Grenadines', 'Samoa', 'San Marino', 'Sao Tome & Principe', 'Saudi Arabia', 'Senegal', 'Serbia', 'Seychelles', 'Sierra Leone', 'Singapore', 'Slovakia', 'Slovenia', 'Solomon Islands', 'Somalia', 'South Africa', 'South Sudan', 'Spain', 'Sri Lanka', 'Sudan', 'Suriname', 'Swaziland', 'Sweden', 'Switzerland', 'Syria', 'Taiwan', 'Tajikistan', 'Tanzania', 'Thailand', 'Togo', 'Tonga', 'Trinidad & Tobago', 'Tunisia', 'Turkey', 'Turkmenistan', 'Tuvalu', 'Uganda', 'Ukraine', 'United Arab Emirates', 'United Kingdom', 'United States', 'Uruguay', 'Uzbekistan', 'Vanuatu', 'Vatican City', 'Venezuela', 'Vietnam', 'Yemen', 'Zambia', 'Zimbabwe' ] class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): hbox = QHBoxLayout() label = QLabel('Enter country: ') self.qle = QLineEdit(self) completer = QCompleter(data) self.qle.setCompleter(completer) hbox.addWidget(label) hbox.addSpacing(20) hbox.addWidget(self.qle) self.setLayout(hbox) self.setWindowTitle('Completer') self.show() def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()
我们有一个示例,在其中我们输入一个国家名称。QLineEdit
会在我们输入时提示国家名称。
data = [ 'Afghanistan', 'Albania', 'Algeria', 'Andorra', 'Angola','Antigua & Deps', 'Argentina', 'Armenia', 'Australia', 'Austria', 'Azerbaijan', 'Bahamas', 'Bahrain', 'Bangladesh', 'Barbados', 'Belarus', 'Belgium', 'Belize', ...
我们有一个国家列表。
self.qle = QLineEdit(self) completer = QCompleter(data) self.qle.setCompleter(completer)
我们将列表传递给 QCompleter
,并使用 setCompleter
将补全器设置到行编辑部件。

在本文中,我们学习了如何使用 PyQt 的 QLineEdit
。
作者
列出所有 PyQt 教程。