QLineEdit 未使用 setText 进行更新

问题描述 投票:0回答:2

我有一个有两个窗口的程序,主窗口和设置窗口。
当我在 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”

python qt pyqt qlineedit qdialog
2个回答
6
投票

问题出在您的

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
的简单子类。所以这两行可以删除。


4
投票

您不应该按照以下方式初始化您的用户界面吗:

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()

我一直都是这样做的,效果非常好。

© www.soinside.com 2019 - 2024. All rights reserved.