Multithreading PySide,从正在运行的程序中打开一个新窗口

Multithreading PySide,从正在运行的程序中打开一个新窗口,multithreading,widget,window,pyside,Multithreading,Widget,Window,Pyside,代码: 如果您单击“配置”,然后单击“设置”,则会弹出一个窗口,确实如此。但它闪烁着,消失了。我试图添加第二个sys.exit(app.exec_u3;()),但由于它位于另一个方法中,因此没有定义它。我应该让应用程序全球化还是和所谓的“线程化”有关? 问候您需要保留新窗口的参考。否则,它将不被引用,并将被垃圾收集 import sys from PySide import QtGui class BrowserDevelopment(QtGui.QMainWindow): def

代码:

如果您单击“配置”,然后单击“设置”,则会弹出一个窗口,确实如此。但它闪烁着,消失了。我试图添加第二个sys.exit(app.exec_u3;()),但由于它位于另一个方法中,因此没有定义它。我应该让应用程序全球化还是和所谓的“线程化”有关?
问候

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

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()
def新窗口(自): self.wid=QtGui.QWidget() 自我宽度调整(250150) self.wid.setWindowTitle('NewWindow') self.wid.show()
尽管我不会在newwindow方法中创建引用。您最好在UI初始化方法中设置首选项窗口,然后只调用self.wid.show()

您需要保留新窗口的引用。否则,它将不被引用,并将被垃圾收集

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()
def新窗口(自): self.wid=QtGui.QWidget() 自我宽度调整(250150) self.wid.setWindowTitle('NewWindow') self.wid.show()
尽管我不会在newwindow方法中创建引用。您最好在UI初始化方法中设置“首选项”窗口,然后只需调用self.wid.show()

哦,您好,谢谢您的回复。天哪,我想我需要重读一些关于方法的东西。但是你为什么不为窗户设计一种新的方法呢?我这样做是为了在一个单独的方法中处理每个新窗口,因为这样你每次都在重新创建窗口。通过将其放置在初始化方法(或其他称为suring initialization的方法)中,您可以保留相同的引用,并随时显示/隐藏它。更快,更少混乱,并允许您保留相同的对象(例如,您也可以在其中保留一些数据)。哦,嗨,谢谢您的回复。天哪,我想我需要重读一些关于方法的东西。但是你为什么不为窗户设计一种新的方法呢?我这样做是为了在一个单独的方法中处理每个新窗口,因为这样你每次都在重新创建窗口。通过将其放置在初始化方法(或其他称为suring initialization的方法)中,您可以保留相同的引用,并随时显示/隐藏它。更快,更少混乱,并允许您保留相同的对象(例如,您也可以在其中保留一些数据)。