经常需要用户输入一行文字,如用户名或密码。通过QLineEdit小组件,你可以从某人那里收集数据。QLineEdit还支持正常的文本编辑功能,如剪切、复制和粘贴,以及重做或撤销。还有一些额外的功能,如在输入时隐藏文本,使用占位符文本,甚至对文本的长度进行限制。
提示: 如果你需要多行让用户输入文本,请使用QTextEdit小组件代替。
接下来,你可以使用QLineEdit部件去创建GUI,同时,你也可以使用其他部件,如QPushButton,以及信号和槽来检索QLineEdit对象中的文本或清除其文本。
- 创建空白GUI
示例程序如下:
# line_edits.py
# Import necessary modules
import sys
from PyQt6.QtWidgets import (QApplication, QWidget, QLabel, QLineEdit, QPushButton)
from PyQt6.QtCore import Qt
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initializeUI()
def initializeUI(self):
"""Set up the application's GUI."""
self.setMaximumSize(310, 130)
self.setWindowTitle("QLineEdit Example")
self.setUpMainWindow()
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec())
之前的例子已经使用setGeometry()来设置窗口在屏幕上的位置和大小。你可以做的一件事是限制窗口的大小。这里,让我们使用QWidget方法setMaximumSize(),并传递MainWindow的最大宽度和高度。
- 创建QLabel对象、QLineEdit部件和QPushButton对象
要在setUpMainWindow()方法中设置小部件之前,我们将首先创建两个QLabel对象,然后是一个QLineEdit小组件,以及两个QPushButton对象。
def setUpMainWindow(self):
"""Create and arrange widgets in the main window."""
QLabel("Please enter your name below.", self).move(70, 10)
name_label = QLabel("Name:", self)
name_label.move(20, 50)
self.name_edit = QLineEdit(self)
self.name_edit.resize(210, 20)
self.name_edit.move(70, 50)
clear_button = QPushButton("Clear", self)
clear_button.move(140, 90)
clear_button.clicked.connect(self.clearText)
accept_button = QPushButton("Accept", self)
accept_button.move(210, 90)
accept_button.clicked.connect(self.acceptText)
这两个QLabel对象只是创建widget的例子。你可以创建widget,并在你的GUI中安排它们,而不必将它们赋值给一个变量。
QLineEdit对象,name_edit,是一个使用resize()方法修改widget大小的例子。你需要指定小部件所需的高度和宽度值。
clear_button和accept_button对象与接下来创建的clearText()和acceptText()槽相连。
- 编写 clearText() 和 acceptText() 槽
当clear_button被点击时,它发出一个连接到clearText()槽的信号,name_edit小组件将对该信号做出反应并清除其当前文本。如果用户点击accept_button,name_edit中的文本会被使用getter text()读取并打印在你的计算机的shell中。然后应用程序就关闭了。
接下俩,让我们来看看另一个在桌面应用程序中常见的部件——QCheckBox。
- 完整程序如下:
# line_edits.py
# Import necessary modules
import sys
from PyQt6.QtWidgets import (QApplication, QWidget, QLabel, QLineEdit, QPushButton)
from PyQt6.QtCore import Qt
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.initializeUI()
def clearText(self):
"""Clear the QLineEdit input field."""
self.name_edit.clear()
def acceptText(self):
"""Accept the user's input in the QLineEdit widget
and close the program."""
print(self.name_edit.text())
self.close()
def setUpMainWindow(self):
"""Create and arrange widgets in the main window."""
QLabel("Please enter your name below.", self).move(70, 10)
name_label = QLabel("Name:", self)
name_label.move(20, 50)
self.name_edit = QLineEdit(self)
self.name_edit.resize(210, 20)
self.name_edit.move(70, 50)
clear_button = QPushButton("Clear", self)
clear_button.move(140, 90)
clear_button.clicked.connect(self.clearText)
accept_button = QPushButton("Accept", self)
accept_button.move(210, 90)
accept_button.clicked.connect(self.acceptText)
def initializeUI(self):
"""Set up the application's GUI."""
self.setMaximumSize(310, 130)
self.setWindowTitle("QLineEdit Example")
self.setUpMainWindow()
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec())
运行结果如下