PyQt5获取用户输入文本遇问题:点击按钮输出空字符串求助
问题原因与解决方法
嘿,这个问题很常见——你在界面初始化的setupUi方法里就提前把textEdit的内容赋值给self.mytext了!这时候用户还没来得及输入任何内容,textEdit本身就是空的,所以self.mytext从一开始就是空字符串,之后不管用户输入多少内容,这个变量都不会自动同步更新。
最简单的修复方法
直接在按钮点击的回调方法里,实时获取文本框的最新内容:
class Ui_Dialog(object): def setupUi(self, Dialog): self.textEdit = QtWidgets.QTextEdit() self.pushButton = QtWidgets.QPushButton(Dialog) # 移除这里的self.mytext赋值操作 self.pushButton.clicked.connect(self.mainjob) def mainjob(self): # 点击按钮时才去读取文本框的当前内容 self.mytext = self.textEdit.toPlainText() print(self.mytext)
这样每次点击按钮,都会主动从textEdit中取出用户刚刚输入(或修改后的)内容,自然就能得到正确的结果了。
进阶:实时同步文本内容
如果你需要在多个地方用到这个文本,并且希望它始终和文本框内容保持一致,可以绑定textEdit的textChanged信号,实时更新self.mytext:
class Ui_Dialog(object): def setupUi(self, Dialog): self.textEdit = QtWidgets.QTextEdit() self.pushButton = QtWidgets.QPushButton(Dialog) self.pushButton.clicked.connect(self.mainjob) # 绑定文本变化信号,只要用户输入就更新mytext self.textEdit.textChanged.connect(self._update_mytext) # 初始化一个空值 self.mytext = "" def _update_mytext(self): self.mytext = self.textEdit.toPlainText() def mainjob(self): print(self.mytext)
核心要点
记住:PyQt的控件内容不会自动同步到你定义的变量里,你必须主动去读取(要么在需要使用时读取,要么在内容变化时实时更新)。初始化阶段控件还处于空白状态,提前赋值只会得到初始的空字符串哦。
内容的提问来源于stack exchange,提问作者keramat
相关产品推荐
相关产品推荐

