2013-03-04 34 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

相关问题