我有一个带有两个窗口的程序,分别是main和settings。
当我在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()
Run Code Online (Sandbox Code Playgroud)
之后:self.lineEdit.setText("safa"),我在QLineEdit中看不到任何文本。
print self.lineEdit.text()输出文本“ safa”
问题出在您的mainwind.py文件中。
您尝试使用以下方法打开对话框:
def buttonclicked(self):
Dialog = QtGui.QDialog()
u = settings.SettingsWindow()
u.setupUi(Dialog)
Dialog.exec_()
Run Code Online (Sandbox Code Playgroud)
文本不显示的原因是因为您正在创建两个对话框。第二个(名为u)已setText()调用它,但随后被扔掉而没有显示。
你的方法应该是这样的:
def buttonclicked(self):
dialog = settings.SettingsWindow()
dialog.exec_()
Run Code Online (Sandbox Code Playgroud)
SettingsWindow对话框的所有设置代码已经在它的__init__方法中,所以你需要做的就是创建它的一个实例。
PS:
在MainWindow.__init__你有Ui_MainWindow.__init__(self),在SettingsWindow.__init__你有Ui_Dialog.__init__(self)。这些行没有做任何有用的事情,因为这些Ui_*类只是object. 所以这两行可以删除。