2013-04-22 102 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