栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python编程实例-PyQt5 GUI编程-Widgets-QLineEdit

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python编程实例-PyQt5 GUI编程-Widgets-QLineEdit

QLineEdit

QLineEdit 小部件是一个简单的单行文本编辑框,用户可以在其中输入内容。 这些用于表单字段或没有有效输入限制列表的设置。 例如,输入电子邮件地址或计算机名称时。

QLineEdit 允许用户输入和编辑单行纯文本。 它具有有用的编辑功能集合,包括撤消和重做、剪切和粘贴以及拖放。

当文本改变时,会发出 textChanged 信号。

1、QLineEdit创建
import sys

from PyQt5.QtWidgets import (QApplication, QLabel, QLineEdit,
                             QVBoxLayout, QWidget)


class MainWindow(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.resize(250, 200)
        self.setWindowTitle('QLineEdit')
        self.show()

    def onChanged(self, text):
        self.lbl.setText(text)
        self.lbl.adjustSize()


def main():
    app = QApplication(sys.argv)
    ex = MainWindow()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

上面示例显示了一个行编辑小部件和一个标签。 我们在行编辑中键入的文本会立即显示在标签小部件中。

qle = QLineEdit(self)

如果行编辑小部件中的文本发生更改,我们调用 onChanged 方法:

def onChanged(self, text):
    self.lbl.setText(text)
    self.lbl.adjustSize() 

在 onChanged 方法中,我们将输入的文本设置为标签小部件。 我们调用 adjustSize 方法将标签的大小调整为文本的长度。

2、文本对齐

QLineEdit小部件的文本可以使用setAlignment对齐:

import sys

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QApplication, QComboBox, QHBoxLayout, QLineEdit,
                             QWidget)

class MainWindow(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[str].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, text):

        if text == 'Left':
            self.qle.setAlignment(Qt.AlignLeft)
        elif text == 'Center':
            self.qle.setAlignment(Qt.AlignCenter)
        else:
            self.qle.setAlignment(Qt.AlignRight)


def main():

    app = QApplication(sys.argv)
    ex = MainWindow()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

该示例包含一个具有三个选项的 QComboBox; 这些选项将相邻 QLineEdit 中的文本向左、居中或向右对齐。

def onActivated(self, text):
    if text == 'Left':
        self.qle.setAlignment(Qt.AlignLeft)
    elif text == 'Center':
        self.qle.setAlignment(Qt.AlignCenter)
    else:
        self.qle.setAlignment(Qt.AlignRight)

在 onActivated 回调中,我们使用 setAlignment 设置了行编辑控件的对齐方式。

3、回显模式

回显模式决定了在行编辑中输入的文本如何显示给用户。 在默认的普通模式下,输入的文本会逐字显示。 其他模式,包括 Password和 PasswordEchoOnEdit 会抑制或隐藏文本。

import sys
from PyQt5.QtWidgets import (QWidget, QComboBox, QPushButton, QLineEdit,
    QHBoxLayout, QApplication, QMessageBox)
from PyQt5.QtCore import Qt

class MainWindow(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[str].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.resize(320, 240)
        self.show()

    def onActivated(self, text):
        if text == 'Normal':
            self.qle.setEchoMode(QLineEdit.EchoMode.Normal)
        elif text == 'Password':
            self.qle.setEchoMode(QLineEdit.EchoMode.Password)
        elif text == 'PasswordEchoOnEdit':
            self.qle.setEchoMode(QLineEdit.EchoMode.PasswordEchoOnEdit)
        elif text == 'NoEcho':
            self.qle.setEchoMode(QLineEdit.EchoMode.NoEcho)
            
    def onClicked(self):
        text = self.qle.text()
        QMessageBox.information(self, 'info', text)

def main():
    app = QApplication(sys.argv)
    ex = MainWindow()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

在示例中,我们可以使用 QComboBox 选择回显模式。

def onActivated(self, text):
    if text == 'Normal':
        self.qle.setEchoMode(QLineEdit.EchoMode.Normal)
    elif text == 'Password':
        self.qle.setEchoMode(QLineEdit.EchoMode.Password)
    elif text == 'PasswordEchoOnEdit':
        self.qle.setEchoMode(QLineEdit.EchoMode.PasswordEchoOnEdit)
    elif text == 'NoEcho':
        self.qle.setEchoMode(QLineEdit.EchoMode.NoEcho)

运行结果:

4、文本验证

可以使用验证器来验证输入文本。

import sys
from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, QSizePolicy,
    QHBoxLayout, QApplication)
from PyQt5.QtGui import QRegExpValidator, QPalette, QColor
from PyQt5.QtCore import QRegExp

class MainWindow(QWidget):
    
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        hbox = QHBoxLayout()

        label = QLabel('HEX colour:', self)

        self.qle = QLineEdit(self)
        validator = QRegExpValidator(QRegExp("[0-9A-Fa-f]{6}"))
        self.qle.setValidator(validator)

        self.qle.editingFinished.connect(self.onEditingFinished)

        self.colLabel = QLabel(self)
        self.colLabel.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.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.Background, 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.Background, QColor(f'#{self.qle.text()}'))
        self.colLabel.setPalette(pal)


def main():

    app = QApplication(sys.argv)
    ex = MainWindow()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

在示例中,我们有一个十六进制格式的颜色值验证器(例如#33fe56)。 输入的颜色用作 QLabel 小部件的背景。

self.qle = QLineEdit(self)
validator = QRegExpValidator(QRegExp("[0-9A-Fa-f]{6}"))
self.qle.setValidator(validator)

我们使用QRegExpValidator来根据正则表达式验证字符串。 正则表达式指定允许的字符并使用量词设置固定长度。 验证器与 setValidator 一起应用。

self.qle.editingFinished.connect(self.onEditingFinished)

当按下 Enter 键或行编辑失去焦点时,会发出 editingFinished 信号。 仅当验证器通过时才会发出信号。

def onEditingFinished(self):
    pal = QPalette()
    pal.setColor(QPalette.Background, QColor(f'#{self.qle.text()}'))
    self.colLabel.setPalette(pal)

运行结果:

5、自动填充

可以使用 setCompleter 提供自动完成功能。

import sys
from PyQt5.QtWidgets import (QWidget, QLabel, QCompleter, QLineEdit,
    QHBoxLayout, QApplication)
from PyQt5.QtCore import Qt

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 MainWindow(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 = MainWindow()
    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',
...

并将该数据传递给QCompleter,调用QLineEdit的setCompleter 将QCompleter绑定到QLineEdit:

self.qle = QLineEdit(self)
completer = QCompleter(data)
self.qle.setCompleter(completer)

运行结果如下:

6、输入过滤

可以使用输入掩码执行输入验证,以定义支持哪些字符以及在何处支持:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
def window():
   app = QApplication(sys.argv)
   win = QWidget()
	
   e1 = QLineEdit()
   e1.setValidator(QIntValidator())
   e1.setMaxLength(4)
   e1.setAlignment(Qt.AlignRight)
   e1.setFont(QFont("Arial",20))
	
   e2 = QLineEdit()
   e2.setValidator(QDoubleValidator(0.99,99.99,2))
	
   flo = QFormLayout()
   flo.addRow("integer validator", e1)
   flo.addRow("Double validator",e2)
	
   e3 = QLineEdit()
   e3.setInputMask('+99_9999_999999')
   flo.addRow("Input Mask",e3)
	
   e4 = QLineEdit()
   e4.textChanged.connect(textchanged)
   flo.addRow("Text changed",e4)
	
   e5 = QLineEdit()
   e5.setEchoMode(QLineEdit.Password)
   flo.addRow("Password",e5)
	
   e6 = QLineEdit("Hello Python")
   e6.setReadOnly(True)
   flo.addRow("Read Only",e6)
	
   e5.editingFinished.connect(enterPress)
   win.setLayout(flo)
   win.setWindowTitle("PyQt")
   win.show()
	
   sys.exit(app.exec_())

def textchanged(text):
   print "contents of text box: "+text
	
def enterPress():
   print "edited"

if __name__ == '__main__':
   window()

运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/869882.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号