QLineEdit未使用setTex更新

2024-05-13 20:27:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有两个窗口的程序,主窗口和设置。
当我在settings.py文件中的QLineEdit上运行setText时,新字符串不在GUI中,我可以在setText代码之前看到该字符串。
当我将相同的代码放入从Qt设计器生成的settingsUI文件中时,它就工作了。但在settings.py中没有。
settings文件是包含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”


Tags: 文件代码pyimportselfuisettingsinit
2条回答

问题出在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__方法中了,所以您只需要创建它的一个实例。

附言:

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

你不应该按照以下几行来初始化你的用户界面吗:

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

我一直都是这样做的,工作起来很有魅力。

相关问题 更多 >