2013-04-22 44 views
0

代码:PySide,从运行的程序打开一个新窗口

import sys 
from PySide import QtGui 

class BrowserDevelopment(QtGui.QMainWindow): 

    def __init__(self): 
     super(BrowserDevelopment, self).__init__() 
     self.startingUI() 

    def startingUI(self): 

     self.setWindowTitle('Alphabrowser') 
     self.resize(800, 400) 
     self.statusBar() 

     #Menueinstellungen an sich 

     menue = self.menuBar() 

     #Actions des Menues: 
     #datei menue 
     menuleiste_datei = menue.addMenu('File') 

     datei_exit = QtGui.QAction('Exit', self) 
     datei_exit.setStatusTip('Close the programm') 
     menuleiste_datei.addAction(datei_exit) 
     datei_exit.triggered.connect(self.close) 

     #Einstellungen menue 
     menuleiste_configurations = menue.addMenu('Configurations') 

     configurations_settings = QtGui.QAction('Settings', self) 
     configurations_settings.setStatusTip('Configurations(Settings)') 
     menuleiste_configurations.addAction(configurations_settings) 
     configurations_settings.triggered.connect(self.newwindow) 

     self.show() 

    def newwindow(self): 
     wid = QtGui.QWidget() 
     wid.resize(250, 150) 
     wid.setWindowTitle('NewWindow') 
     wid.show() 


def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = BrowserDevelopment() 
    sys.exit(app.exec_()) 

if __name__== '__main__': 
    main() 

如果单击“配置”,然后选择“设置”窗口应弹出,这确实。但它闪烁并消失。我尝试添加第二个sys.exit(app.exec_()),但它没有被定义,因为它在另一个方法中。我应该只是使应用程序全球或有这样的所谓“线程”? Greets

回答

3

您需要保留一个新窗口的参考。否则,它不会被引用,并且会被垃圾收集。

 
    def newwindow(self): 
     self.wid = QtGui.QWidget() 
     self.wid.resize(250, 150) 
     self.wid.setWindowTitle('NewWindow') 
     self.wid.show() 

尽管我不会在newwindow方法中创建引用。你可以更好地在你的UI初始化方法中设置你的首选项窗口,然后只需调用self.wid.show()

+0

嗨,谢谢你的回复。哦,我的天啊,我想我需要重读一些关于方法的东西。但是,为什么你不为窗口做一个新的方法?我做了这个更多的监督,以独立的方式处理每个新窗口。 – JonnyPython 2013-04-23 14:23:57

+0

因为这样你每次都重新创建窗口。通过将其放置在初始化方法(或其他一些称为suring初始化的方法)中,您可以保留相同的参考,并随时显示/隐藏它。更快,更少杂乱,并允许你保持相同的对象(以便你可以保存一些数据)。 – insys 2013-04-23 19:10:02

相关问题