QLineEdit 单行输入框

这篇文章介绍了如何在PyQt6环境中使用QLineEdit组件创建单行输入框,包括设置输入框的位置、样式以及读取用户输入内容的方法,并提供了代码示例,展示了如何修改输入框样式、限制输入长度和获取输入文字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QLineEdit 单行输入框

QLineEdit 是 PyQt6 里的单行输入框组件,这篇教学会介绍如何在 PyQt6 窗口里加入 QLineEdit 单行输入框,并实作修改样式以及读取输入文字等基本应用。

快速预览:

  • 加入 QLineEdit 单行输入框

  • QLineEdit位置设置

  • QLineEdit 样式设定

  • QLineEdit常用方法

  • 取得 QLineEdit 输入字内容

加入 QLineEdit 单行输入框

建立 PyQt6 窗口物件后,透过 QtWidgets.QLineEdit(widget)方法,就能在指定的组件中建立单行输入框组件,下方的程序执行后,会在窗口里加入一个单行输入框。

 from PyQt6 import QtWidgets
 import sys
 app = QtWidgets.QApplication(sys.argv)
 ​
 Form = QtWidgets.QWidget()
 Form.setWindowTitle('千牛编程思维')
 Form.resize(300, 200)
 ​
 input = QtWidgets.QLineEdit(Form)   # 建立單行輸入框
 input.setGeometry(20,20,100,20)     # 設定位置和尺寸
 ​
 Form.show()
 sys.exit(app.exec())

class 写法:

 from PyQt6 import QtWidgets
 import sys
 ​
 class MyWidget(QtWidgets.QWidget):
     def __init__(self):
         super().__init__()
         self.setWindowTitle('千牛编程思维')
         self.resize(300, 200)
         self.ui()
 ​
     def ui(self):
         self.input = QtWidgets.QLineEdit(self)   # 建立單行輸入框
         self.input.setGeometry(20,20,100,20)     # 設定位置和尺寸
 ​
 if __name__ == '__main__':
     app = QtWidgets.QApplication(sys.argv)
     Form = MyWidget()
     Form.show()
     sys.exit(app.exec())

QLineEdit位置设置

透过下列 QLineEdit 方法,可以将 QLineEdit 组件定位到指定的位置:

方法参数说明
move()x, y设定 QLineEdit 在摆放的父组件中的 xy 坐标,x 往右为正,y 往下为正,尺寸根据内容自动延伸。
setGeometry()X,X,Y,W,H设定 QLineEdit 在摆放的父组件中的 xy 坐标和长宽尺寸,x 往右为正,y 往下为正,如果超过长宽尺寸,输入的文字会被裁切无法显示。

下方的程序执行后会放入两个 QLineEdit,一个使用 move() 定位并使用预设宽度,另外一个使用 setGeometry() 方法定位。

 from PyQt6 import QtWidgets
 import sys
 app = QtWidgets.QApplication(sys.argv)
 ​
 Form = QtWidgets.QWidget()
 Form.setWindowTitle('千牛编程思维')
 Form.resize(300, 200)
 ​
 input_1 = QtWidgets.QLineEdit(Form)   # 第一個輸入框
 input_1.move(20,20)
 ​
 input_2 = QtWidgets.QLineEdit(Form)   # 第二個輸入框
 input_2.setGeometry(20,50,100,20)
 ​
 Form.show()
 sys.exit(app.exec())

class 写法:

 from PyQt6 import QtWidgets
 import sys
 ​
 class MyWidget(QtWidgets.QWidget):
     def __init__(self):
         super().__init__()
         self.setWindowTitle('千牛编程思维')
         self.resize(300, 200)
         self.ui()
 ​
     def ui(self):
         self.input_1 = QtWidgets.QLineEdit(self)   # 第一個輸入框
         self.input_1.move(20,20)
 ​
         self.input_2 = QtWidgets.QLineEdit(self)   # 第二個輸入框
         self.input_2.setGeometry(20,50,100,20)
 ​
 if __name__ == '__main__':
     app = QtWidgets.QApplication(sys.argv)
     Form = MyWidget()
     Form.show()
     sys.exit(app.exec())

QLineEdit 样式设定

透过 setStyleSheet(),可以使用类似网页的 CSS 语法设定 QPushButton 样式,下方的程序执行后,第一个输入框会套用 CSS 样式语法,当输入框为焦点时,会变成黄底红框的样式,而第二个输入框则维持原本的样式。

 from PyQt6 import QtWidgets
 import sys
 app = QtWidgets.QApplication(sys.argv)
 ​
 Form = QtWidgets.QWidget()
 Form.setWindowTitle('千牛编程思维')
 Form.resize(300, 200)
 ​
 input_1 = QtWidgets.QLineEdit(Form)
 input_1.move(20,20)
 input_1.setStyleSheet('''
     QLineEdit {
         border:1px solid #000;
     }
     QLineEdit:focus {
         border:2px solid #f00;
         background:#ff0;
     }
 ''')
 ​
 input_2 = QtWidgets.QLineEdit(Form)
 input_2.setGeometry(20,50,100,20)
 ​
 Form.show()
 sys.exit(app.exec())

class 写法:

 from PyQt6 import QtWidgets
 import sys
 ​
 class MyWidget(QtWidgets.QWidget):
     def __init__(self):
         super().__init__()
         self.setWindowTitle('千牛编程思维')
         self.resize(300, 200)
         self.ui()
 ​
     def ui(self):
         self.input_1 = QtWidgets.QLineEdit(self)
         self.input_1.move(20,20)
         self.input_1.setStyleSheet('''
             QLineEdit {
                 border:1px solid #000;
             }
             QLineEdit:focus {
                 border:2px solid #f00;
                 background:#ff0;
             }
         ''')
 ​
         self.input_2 = QtWidgets.QLineEdit(self)
         self.input_2.setGeometry(20,50,100,20)
 ​
 if __name__ == '__main__':
     app = QtWidgets.QApplication(sys.argv)
     Form = MyWidget()
     Form.show()
     sys.exit(app.exec())

QLineEdit常用方法

下方列出使用 QLineEdit 的常用方法:

方法参数说明
setText()str预设输入的文字内容。
setReadOnly()bool设定只能读取,预设 False。
setDisabled()bool设定是否禁用,预设 False。
setMaxLength()int输入的最大字元数。
setFocus()设定为焦点。
setEchoMode()mode设定QtWidgets.QLineEdit.EchoMode.Password表示为密码,看不见输入内容 ( 此处方法与 PyQt5 不同 )。
textChanged.connect()fn文字改变时要执行的函数。
text()取得输入框内容。

下方的程序执行后,预设会先点击第二个输入框,而第一个输入框最多只能输入五个字元,并且采用密码的型态表现。

 from PyQt6 import QtWidgets
 import sys
 app = QtWidgets.QApplication(sys.argv)
 ​
 Form = QtWidgets.QWidget()
 Form.setWindowTitle('千牛编程思维')
 Form.resize(300, 200)
 ​
 input_1 = QtWidgets.QLineEdit(Form)
 input_1.setGeometry(20,20,100,20)
 input_1.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
 input_1.setText('12345')
 input_1.setMaxLength(5)
 ​
 input_2 = QtWidgets.QLineEdit(Form)
 input_2.setGeometry(20,50,100,20)
 input_2.setFocus()
 ​
 Form.show()
 sys.exit(app.exec())

class 写法:

 from PyQt6 import QtWidgets
 import sys
 ​
 class MyWidget(QtWidgets.QWidget):
     def __init__(self):
         super().__init__()
         self.setWindowTitle('千牛编程思维')
         self.resize(300, 200)
         self.ui()
 ​
     def ui(self):
         self.input_1 = QtWidgets.QLineEdit(self)
         self.input_1.setGeometry(20,20,100,20)
         self.input_1.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
         self.input_1.setText('12345')
         self.input_1.setMaxLength(5)
 ​
         self.input_2 = QtWidgets.QLineEdit(self)
         self.input_2.setGeometry(20,50,100,20)
         self.input_2.setFocus()
 ​
 if __name__ == '__main__':
     app = QtWidgets.QApplication(sys.argv)
     Form = MyWidget()
     Form.show()
     sys.exit(app.exec())

取得 QLineEdit 输入字内容

运用textChanged.connect(fn)方法,就能在输入框内容改变时,执行特定的函数,下方的程序执行后,当单行输入框的内容发生改变,就会透过 QLabel 显示输入的内容。

 from PyQt6 import QtWidgets
 import sys
 app = QtWidgets.QApplication(sys.argv)
 ​
 Form = QtWidgets.QWidget()
 Form.setWindowTitle('千牛编程思维')
 Form.resize(300, 200)
 ​
 def show():
     label.setText(input.text())
 ​
 input = QtWidgets.QLineEdit(Form)
 input.setGeometry(20,20,100,20)
 input.textChanged.connect(show)   # 文字改變時執行函数
 ​
 label = QtWidgets.QLabel(Form)
 label.setGeometry(20,50,100,20)
 ​
 Form.show()
 sys.exit(app.exec())

class 写法 ( 注意不能使用 show 作为方法名称,会覆写基类的 show 方法造成无法显示 ):

 from PyQt6 import QtWidgets
 import sys
 ​
 class MyWidget(QtWidgets.QWidget):
     def __init__(self):
         super().__init__()
         self.setWindowTitle('千牛编程思维')
         self.resize(300, 200)
         self.ui()
 ​
     def ui(self):
         self.input = QtWidgets.QLineEdit(self)
         self.input.setGeometry(20,20,100,20)
         self.input.textChanged.connect(self.showText)   # 文字改變時執行函数
 ​
         self.label = QtWidgets.QLabel(self)
         self.label.setGeometry(20,50,100,20)
 ​
     def showText(self):
         self.label.setText(self.input.text())
 ​
 if __name__ == '__main__':
     app = QtWidgets.QApplication(sys.argv)
     Form = MyWidget()
     Form.show()
     sys.exit(app.exec())

### 单行输入框的换行功能实现 在标准定义中,单行输入框通常不支持多行显示或换行功能。然而,在某些框架或技术栈中可以通过特定方式来模拟这一行为。 #### HTML 和 `<textarea>` 实现 如果使用的是 HTML 技术栈,`<textarea>` 是一个多行文本区域,默认情况下允许用户输入并换行。为了控制换行模式,可以利用 `wrap` 属性[^1]: ```html <textarea wrap="hard"></textarea> ``` 上述代码中的 `wrap="hard"` 表示强制换行,而 `wrap="soft"` 则表示自动换行。需要注意的是,虽然 `<textarea>` 支持多行输入,但它本质上是一个多行文本域而非单行输入框。 #### Flutter 中的解决方案 在 Flutter 框架中,`TextField` 组件默认用于单行文本输入,而 `TextFormField` 提供了更高级的功能,但两者均不适合直接处理多行文本[^2]。对于多行文本的支持,推荐使用 `TextField` 并设置其 `maxLines` 参数为大于 1 或者 null(无限制): ```dart TextField( maxLines: null, // 设置为 null 可以让 TextField 自动调整高度适应内容 keyboardType: TextInputType.multiline, ) ``` 通过这种方式,即使初始设计为单行输入框,也可以动态切换至多行模式。 #### Qt 中的 QLineEdit 替代方案 Qt 的 `QLineEdit` 是专为单行文本输入设计的控件,因此它本身并不支持多行显示或换行操作[^3]。 若要实现类似效果,可以选择使用 `QTextEdit` 控件替代,并将其配置为只接受单行输入直到手动触发换行逻辑为止: ```cpp QTextEdit *textEdit = new QTextEdit; textEdit->setLineWrapMode(QTextEdit::WidgetWidth); // 启用自动换行 textEdit->setFixedHeight(50); // 设定固定高度模仿单行样式 ``` 以上代码片段展示了如何将 `QTextEdit` 调整成接近单行输入框的行为,同时保留多行文本的能力。 --- ### 注意事项 尽管可以通过这些方法使原本的单行输入框具备一定的多行特性,但在用户体验上仍需谨慎考虑实际需求与交互一致性之间的平衡。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值