2013-12-19 27 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