
文本控件
PySide6 提供了多种文本控件,用于显示和编辑文本,包括:
- QLabel:用于显示文本,不支持编辑
- QLineEdit:用于编辑文本,支持输入
- QTextEdit:用于编辑多行文本,支持格式化
- QPlainTextEdit:用于编辑多行文本,不支持格式化
一图全览

文本控件选型:
- 只展示不用输入 → QLabel
- 只能一行输入 → QLineEdit
- 排版富文本 → QTextEdit
- 日志、代码、纯文本 → QPlainTextEdit
QLabel
窗口界面中的 QLabel,分别显示文本、图片、HTML。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QLabel
from PySide6.QtGui import QPixmap
from PySide6.QtCore import QSize
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QLabel 演示")
self.resize(400, 400)
widget = QWidget(self)
layout = QVBoxLayout(widget)
self.setCentralWidget(widget)
# 纯文本
label_text = QLabel("纯文本 QLabel")
layout.addWidget(label_text)
# 图片
pixmap = QPixmap("cover5.png").scaled(QSize(220, 100))
label_img = QLabel()
label_img.setPixmap(pixmap)
layout.addWidget(label_img)
# HTML 格式
label_html = QLabel("<b>HTML 格式 QLabel</b>")
layout.addWidget(label_html)
# 超链接
label_link = QLabel("<a href='https://www.pythonguis.com'>这是一个链接</a>")
# 开启外部链接
label_link.setOpenExternalLinks(True)
layout.addWidget(label_link)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
|
运行效果如下:

使用 QLabel 需要注意以下几点:
- QLabel 不支持编辑,无法获取焦点
- setText 方法设置文本内容或实例化时传入,setPixmap 方法设置图片
- setPixmap 会覆盖 setText 方法设置的文本内容,只能显示文本或图片之一
- 图片显示支持 png、jpg、jpeg、gif 等格式,支持缩放、居中显示等操作
QLineEdit
QLineEdit 用于编辑文本,支持单行输入。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QLineEdit, QPlainTextEdit
from PySide6.QtCore import Slot
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QLabel 演示")
self.resize(400, 200)
widget = QWidget(self)
layout = QVBoxLayout(widget)
self.setCentralWidget(widget)
# 用户名
self.line_username = QLineEdit()
self.line_username.setPlaceholderText("请输入用户名")
self.line_username.returnPressed.connect(self.username_finish)
layout.addWidget(self.line_username)
# 密码
self.line_password = QLineEdit()
self.line_password.setPlaceholderText("请输入密码")
self.line_password.setEchoMode(QLineEdit.EchoMode.Password)
self.line_password.returnPressed.connect(self.password_finish)
layout.addWidget(self.line_password)
# 加个日志,响应文本变化
self.edit_log = QPlainTextEdit()
layout.addWidget(self.edit_log, stretch=1)
@Slot()
def username_finish(self):
username = self.line_username.text()
self.edit_log.appendPlainText(f"用户名: {username}")
@Slot()
def password_finish(self):
password = self.line_password.text()
self.edit_log.appendPlainText(f"密码: {password}")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
|
使用 QLineEdit 实现了用户名、密码输入框:
- 使用
setPlaceholderText 方法设置占位符文本 setEchoMode 方法设置密码输入模式returnPressed 信号触发,获取输入文本
运行效果如下:

使用 QLineEdit 需要注意以下几点:
- 单行输入,不能换行:回车会触发 returnPressed 信号
- 密码框必须设 setEchoMode(QLineEdit.EchoMode.Password),否则明文显示
- 空输入判断:
xxx.text().strip() == "",注意去掉首尾空白 - 限制长度:
setMaxLength(n),n 为最大输入长度
QTextEdit
QTextEdit 用于编辑多行文本,支持富文本格式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QGridLayout, QHBoxLayout, QTextEdit, QPushButton
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QTextEdit 演示")
self.resize(800, 400)
widget = QWidget(self)
grid_layout = QGridLayout(widget)
self.setCentralWidget(widget)
self.edit_text_pure = QTextEdit()
self.edit_text_pure.append("""《水浒传》又名《忠义水浒传》、《江湖豪客传》,是我国第一部歌颂农民起义的长篇章回体小说,写于元末明初, 故事取材于北宋末年的宋江起义。 它生动地描写了梁山好汉们从起义到兴盛再到最终失败的全过程, 特别是通过写众多草莽英雄不同的人生经历和反抗道路,鲜明地表现了“官逼民反”的主题,是一部反抗封建暴政的英雄传奇。 小说真实地叙写了起义斗争的发展过程:从个人反抗到集体反抗,从分散斗争到有组织斗争,规模从小到大。""")
grid_layout.addWidget(self.edit_text_pure, 0, 0)
self.edit_text_html = QTextEdit()
self.edit_text_html.append("""<h3 style="text-align:center;">静夜思</h3>
<p style="text-align:center; color: blue;">床前明月光,</p>
<p style="text-align:center; font-size: 20px;">疑是地上霜。</p>
<p style="text-align:center; text-decoration: underline;">举头望明月,</p>
<p style="text-align:center;">低头思故乡。</p>""")
grid_layout.addWidget(self.edit_text_html, 0, 1)
btns_widget = QWidget()
grid_layout.addWidget(btns_widget, 1, 0, 1, 2)
btns_layout = QHBoxLayout(btns_widget)
self.btn_can_edit = QPushButton("禁用编辑")
self.btn_can_edit.clicked.connect(self.toggle_readonly)
btns_layout.addWidget(self.btn_can_edit)
self.btn_clear = QPushButton("清空内容")
self.btn_clear.clicked.connect(self.clear_content)
btns_layout.addWidget(self.btn_clear)
self.btn_get_content = QPushButton("获取内容")
self.btn_get_content.clicked.connect(self.get_content)
btns_layout.addWidget(self.btn_get_content)
def toggle_readonly(self):
self.edit_text_pure.setReadOnly(not self.edit_text_pure.isReadOnly())
self.edit_text_html.setReadOnly(not self.edit_text_html.isReadOnly())
self.btn_can_edit.setText("启用编辑" if self.edit_text_pure.isReadOnly() else "禁用编辑")
def clear_content(self):
self.edit_text_pure.clear()
self.edit_text_html.clear()
def get_content(self):
print(self.edit_text_pure.toPlainText())
print(self.edit_text_html.toHtml())
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
|
- 使用
QGridLayout 布局,将 QTextEdit 放置在不同的列中 - 调用
QTextEdit.append 方法添加文本内容,支持纯文本、HTML QTextEdit.setReadOnly 方法设置文本内容为只读模式,通过 QTextEdit.isReadOnly 方法判断是否只读QTextEdit.clear 方法清空文本内容QTextEdit.toPlainText 方法获取纯文本内容QTextEdit.toHtml 方法获取 HTML 内容
运行效果如下:

使用 QTextEdit 需要注意以下几点:
- 获取内容的两种方式:toHtml() 返回带标签的完整 HTML;toPlainText() 返回纯文本;
append 方法自动换行追加到末尾textChanged 每次编辑便会触发
QPlainTextEdit
QPlainTextEdit 用于编辑多行文本,不支持富文本格式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QGridLayout, QHBoxLayout, QPlainTextEdit, QPushButton
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("QPlainTextEdit 演示")
self.resize(800, 400)
widget = QWidget(self)
grid_layout = QGridLayout(widget)
self.setCentralWidget(widget)
self.edit_text_pure = QPlainTextEdit()
self.edit_text_pure.appendPlainText("""《水浒传》又名《忠义水浒传》、《江湖豪客传》,是我国第一部歌颂农民起义的长篇章回体小说,写于元末明初, 故事取材于北宋末年的宋江起义。 它生动地描写了梁山好汉们从起义到兴盛再到最终失败的全过程, 特别是通过写众多草莽英雄不同的人生经历和反抗道路,鲜明地表现了“官逼民反”的主题,是一部反抗封建暴政的英雄传奇。 小说真实地叙写了起义斗争的发展过程:从个人反抗到集体反抗,从分散斗争到有组织斗争,规模从小到大。""")
grid_layout.addWidget(self.edit_text_pure, 0, 0)
self.edit_text_pure2 = QPlainTextEdit()
self.edit_text_pure2.appendPlainText("""<h3 style="text-align:center;">静夜思</h3>
<p style="text-align:center; color: blue;">床前明月光,</p>
<p style="text-align:center; font-size: 20px;">疑是地上霜。</p>
<p style="text-align:center; text-decoration: underline;">举头望明月,</p>
<p style="text-align:center;">低头思故乡。</p>""")
grid_layout.addWidget(self.edit_text_pure2, 0, 1)
btns_widget = QWidget()
grid_layout.addWidget(btns_widget, 1, 0, 1, 2)
btns_layout = QHBoxLayout(btns_widget)
self.btn_can_edit = QPushButton("禁用编辑")
self.btn_can_edit.clicked.connect(self.toggle_readonly)
btns_layout.addWidget(self.btn_can_edit)
self.btn_clear = QPushButton("清空内容")
self.btn_clear.clicked.connect(self.clear_content)
btns_layout.addWidget(self.btn_clear)
self.btn_get_content = QPushButton("获取内容")
self.btn_get_content.clicked.connect(self.get_content)
btns_layout.addWidget(self.btn_get_content)
def toggle_readonly(self):
self.edit_text_pure.setReadOnly(not self.edit_text_pure.isReadOnly())
self.edit_text_pure2.setReadOnly(not self.edit_text_pure2.isReadOnly())
self.btn_can_edit.setText("启用编辑" if self.edit_text_pure.isReadOnly() else "禁用编辑")
def clear_content(self):
self.edit_text_pure.clear()
self.edit_text_pure2.clear()
def get_content(self):
print(self.edit_text_pure.toPlainText())
print(self.edit_text_pure2.toPlainText())
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
|
与 QTextEdit 相比,QPlainTextEdit 不支持格式化,只能显示纯文本;不支持 append 方法,但支持 appendPlainText 方法。
运行效果如下:

使用 QPlainTextEdit 需要注意以下几点:
- 只支持纯文本,HTML 不会渲染,HTML 会原样显示
- 追加用 appendPlainText()
- 读取全文 toPlainText()
小结
本文介绍了 PySide6 文本控件 QLabel、QLineEdit、QTextEdit、QPlainTextEdit 的使用,包括设置占位符、密码输入、追加文本、获取文本内容等,并提供相应示例代码进行说明