2014-01-25 125 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() 

這是我做這一切的時候和工作就像一個魅力。