2013-12-19 55 views
0

我有問題試圖建立一個新的對話框從我的主窗口傳遞路徑參數,現在對話框只是閃爍並退出...我認爲問題是我在哪裏顯示窗口但我無法弄清楚我應該放哪裏!
在此XtractMainWindow.py文件我設置的主窗口,獲取路徑PyQt新的對話框與參數

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
import ui_XtractMainWindow 
import AndroidDialog 
import sys 

class XtractMainWindow(QMainWindow, ui_XtractMainWindow.Ui_XtractMainWindow): 
    def __init__(self, parent=None): 
    super(XtractMainWindow, self).__init__(parent) 
    self.setupUi(self) 

    self.androidXtractButton.clicked.connect(self.setAndroid) 

def setAndroid(self): 
    filename = QFileDialog.getExistingDirectory(self, "Open Directory", "/home") 
    print filename 
    dialog = AndroidDialog.AndroidDialog(str(filename)) 
    dialog.show() 


app = QApplication(sys.argv) 
form = XtractMainWindow() 
form.show() 
app.exec_() 

這是對話框,在AndroidDialog.py文件

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
import csv 
import sys 
import Android_extractor 
import ui_android_dialog 

class AndroidDialog(QDialog, ui_android_dialog.Ui_androidDialog): 
    def __init__(self, filename, parent=None): 
     super(AndroidDialog, self).__init__(parent) 
     self.setupUi(self) 

感謝您的任何建議!

回答

1
dialog = AndroidDialog.AndroidDialog(str(filename)) 
dialog.show() 

在這裏您可以看到您將對話框的引用保存在局部變量中。當setAndroid(self)完成執行時,dialog變量被垃圾收集器收集(銷燬)。

請注意,只要對該窗口的引用存在,窗口就會存在。

這樣做:

self.dialog = AndroidDialog.AndroidDialog(str(filename)) 
self.dialog.show() 

在這種情況下self.dialog是一個類的成員,其將不會被收集或通過垃圾收集器破壞。

+0

你是對的,但新的對話框仍然不顯示。我發現調用的方法是dialog.exec_()而不是show() – Rigel

+0

在這裏工作正常。對話框不會消失。您應該接受答案,因爲它可以解決問題,可以幫助未來的某人 – qurban

+0

不確定之前發生了什麼問題,但現在它可以正常工作。非常感謝你! – Rigel