PyQt5中QPushButton点击后如何让QLabel文本分两行独立显示
PyQt5点击按钮后QLabel分两行展示文本的实现方案
问题根因
- 原代码中QLabel预设高度仅20像素,即使插入换行符也无法完整承载两行文本的显示需求,会出现第二行被裁切的问题
- 原槽函数传入
setText的字符串没有添加换行分隔符,默认按单行格式渲染 - 原代码存在几处语法书写错误:类定义关键字
class被写成大写Class、程序入口判断关键字if被写成大写If,会导致程序无法正常启动
关键修改点
- 调整QLabel的几何位置参数,将高度从20像素提升至60像素,预留两行文本的显示空间
- 修改槽函数内的文本设置内容,使用
\n作为行分隔符,匹配要求的两行文本格式 - 修正代码中的大写语法关键字问题,保留原有点击后隐藏按钮的交互逻辑
修正后可直接运行的完整代码
from PyQt5 import QtCore, QtGui, QtWidgets import sys class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.resize(506, 312) self.centralwidget = QtWidgets.QWidget(MainWindow) # 添加PushButton组件 self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(200, 150, 93, 28)) # 绑定点击信号到槽函数 self.pushButton.clicked.connect(self.changelabeltext) self.label = QtWidgets.QLabel(self.centralwidget) # 调整高度为60像素,适配两行文本完整显示 self.label.setGeometry(QtCore.QRect(140, 90, 221, 60)) # 按钮点击前清空标签文本 self.label.setText("") MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushButton.setText(_translate("MainWindow", "Push Button")) def changelabeltext(self): # 通过\n分隔两行指定格式文本 self.label.setText("1 You clicked\n2 PushButton") # 点击后隐藏PushButton self.pushButton.hide() if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_())
额外提示:如果后续需要文本宽度自适应换行,可给QLabel添加
self.label.setWordWrap(True)属性,文本会根据控件宽度自动拆行,无需手动添加换行符。
内容的提问来源于stack exchange,提问作者Ali Boucharbat
相关产品推荐
相关产品推荐

