2014-01-25 51 views
4

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

self.browse_file.setText("safa")

但在设置文件这么想的工作。QLineEdit没有更新setText

--UPDATE--

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()输出文本“萨法”

+1

“不起作用”是什么意思?你能告诉我们一些代码吗? – Hyperboreus

+0

我的意思是我不能在GUI中的QLineEdit中看到新字符串“safa”,但是如果我打印'self.browse_file.text()',我可以在终端中看到“safa”。 –

+0

一些更多的代码可能在这里有所帮助 – embert

回答

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__方法里面,因此,所有你需要做的就是创建它的一个实例。

PS:

MainWindow.__init__你有Ui_MainWindow.__init__(self),并在SettingsWindow.__init__你有Ui_Dialog.__init__(self)。这些行不会做任何有用的事情,因为Ui_*类只是object的简单子类。所以这两行可以删除。

+0

谢谢!这解决了我一个月的问题!对于我的误解抱歉: –

3

你不应该沿着这些线路初始化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() 

这是我做这一切的时候和工作就像一个魅力。