2013-03-04 36 views
1

我是Python和pyside的初學者。我有一個.ui文件,我想在點擊主窗口中的一個按鈕時打開它作爲第二個窗口。我使用了這個代碼,但是它可能因爲「自我」而關閉了主窗口。請幫助我。如何在pyside中打開一個新窗口

class PhoneBook: 

    def __init__(self): 
     loader = QUiLoader();  
     file = QFile("PhoneBook.ui"); 
     file.open(QFile.ReadOnly); 
     self.ui = loader.load(file);  
     file.close();   
     self.ui.pushButton.clicked.connect(self.add); 

    def __del__ (self): 
     self.ui = None; 

    def add(self): 
     loader1 = QUiLoader();  
     file1 = QFile("Add.ui");  
     file1.open(QFile.ReadOnly); 
     self.ui = loader1.load(file1); 
     file1.close();   
     self.ui.show(); 

    def show(self): 
     self.ui.show(); 
+0

我沒有在PySide工作知識,但你的猜測是接近真理,在你的add()方法你基本上覆蓋了新加載UI文件的對象變量'self.ui'。如果你打算添加另一個窗口,通過創建一個局部變量'ui2'或另一個對象變量'self.ui2'來產生另一個窗口,這取決於你需要怎樣處理第二個窗口。 – woozyking 2013-03-04 15:36:47

+0

感謝woozyking。它真的有效。但只是另一個問題。如何使用QDialog創建一個新的對話框?意思是我想在不使用.ui文件的情況下在add方法中創建一個新的對話框。 – GanitK 2013-03-04 15:53:00

+0

很高興幫助。正如我所說的,我沒有PySide的工作知識。請查閱官方文檔http://srinikom.github.com/pyside-docs/以獲得深入參考。我確信有方法以編程方式操作UI元素,而不使用這樣的.ui文件 – woozyking 2013-03-04 15:56:31

回答

0

我也是noob。關於如何進行對話,我認爲你的觀點是你想輸入電話簿數據的輸入對話框。我發現最簡單的方法是這樣的:

txtLabel = "Put some value into dialog" 
inputText, ok = QInputDialog.getText(self, "Dialog Name", txtLabel) 
if ok: 
    print ".........." 
    print inputText 

......而這對於一些字符串輸入(QInputDialog)最簡單的對話。如果你需要更高要求的對話框(你會遲早),你應該使用QDialog基類。在這種情況下,你想要把它放到什麼位置,它將如何看起來以及它的行爲。在PySide DOCS幾乎所有的東西都很好解釋。

+0

感謝Alex的回答。鏈接肯定非常豐富。 – GanitK 2013-03-13 12:25:07

相關問題