QLineEdit 不使用 setText 更新

Posted

技术标签:

【中文标题】QLineEdit 不使用 setText 更新【英文标题】:QLineEdit is not updating with setText 【发布时间】:2014-01-25 06:39:25 【问题描述】:

我的程序有两个窗口,主窗口和设置。 当我在 settings.py 文件中的 QLineEdit 上运行 setText 时,新字符串不在 GUI 中,我可以在 setText 代码之前看到该字符串。 当我将相同的代码放入从 Qt Designer 生成的 settingsUI 文件中时,它可以工作。但在 settings.py 中没有。 设置文件是包含 SettingsWindow 类的文件,我可以将真正的 python 代码放入其中。 settingsUI 文件是包含 GUI 的文件,我使用 pyuic4(或 pyuic5)生成它。 此代码适用于 settingsUI 文件:self.browse_file.setText("safa") 但在设置文件中不起作用。

--更新--

import sys
from PyQt4 import QtCore, QtGui
from settingsui import Ui_Dialog
class SettingsWindow(QtGui.QDialog, Ui_Dialog):
    def __init__(self):
        QtGui.QDialog.__init__(self)
        Ui_Dialog.__init__(self)
        self.setupUi(self)
        self.lineEdit.setText("safa")
        print self.lineEdit.text()

之后:self.lineEdit.setText("safa"),我在 QLineEdit 中看不到任何文本。print self.lineEdit.text() 输出文本“safa”

【问题讨论】:

“不起作用”是什么意思?你能给我们看一些代码吗? 我的意思是我在 GUI 的 QLineEdit 中看不到新字符串“safa”,但是如果我打印 self.browse_file.text() 我可以在终端中看到“safa”。 更多代码在这里可能会有所帮助 完整示例:mediafire.com/download/uf8q89p6w43egwn/example.tar.xz 大多数人(包括我)不会下载档案来追踪您的问题。您可以考虑提取一个完整的最小问题示例(从您的问题中我会说大约 20 行......) 【参考方案1】:

问题出在您的mainwind.py 文件中。

您尝试使用以下方法打开对话框:

    def buttonclicked(self):
        Dialog = QtGui.QDialog()
        u = settings.SettingsWindow()
        u.setupUi(Dialog)
        Dialog.exec_()

文本不显示的原因是因为您正在创建 两个 对话框。第二个(名为u)调用了setText(),但随后被丢弃而不显示。

您的方法应该如下所示:

    def buttonclicked(self):
        dialog = settings.SettingsWindow()
        dialog.exec_()

SettingsWindow 对话框的所有设置代码都已在其__init__ 方法中,因此您需要做的就是创建它的一个实例。

PS:

MainWindow.__init__ 中有Ui_MainWindow.__init__(self),在SettingsWindow.__init__ 中有Ui_Dialog.__init__(self)。这些行没有任何用处,因为Ui_* 类只是object 的简单子类。所以这两行可以去掉。

【讨论】:

谢谢!这解决了我一个月的问题!并对我的误解深表歉意:\【参考方案2】:

您不应该按照以下方式初始化您的 UI:

class SettingsWindow(QtGui.QDialog):
    def __init__(self, parent = None):
        QtGui.QDialog.__init__(self, parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.ui.lineEdit.setText("safa")
        print self.ui.lineEdit.text()

这就是我一直这样做的方式,并且像魅力一样工作。

【讨论】:

以上是关于QLineEdit 不使用 setText 更新的主要内容,如果未能解决你的问题,请参考以下文章

Qt中想产生可以随一些条件变化的文本,像是QLabel那样只能看到文字的

QLineEdit

QT lineEdit 怎么自由的输入内容 我输入的时候只能输入汉字 无法输入字母和数字

获取所有子控件

一个QLineEdit一个QTextEdit,向其中一个输入信息按回车,在QTextEdit中出现,怎么实现?

如何使 QPushButtons 将文本添加到 QLineEdit 框中?