2017-11-17 2 views
0

Ich schaffe einen Hauptrahmen und einen Druckknopf,Pyside2 wie den Dialog zu öffnen, aber nicht immer oben

und lassen Schaltfläche geklickt einen Dialog zu öffnen, aber der Dialog immer an der Spitze,

Ich versuche, benutze setWindowsFlag aber nicht funktionieren.

from PySide2.QtWidgets import QApplication,QMainWindow,QTabWidget,QWidget 
from PySide2.QtWidgets import QMessageBox,QFileDialog,QErrorMessage 
from PySide2 import QtCore, QtGui, QtWidgets 
class UI_Test20(object): 
    def setupUi(self, Test202): 
     Test202.setObjectName("Test202") 
     Test202.resize(100,100) 
     self.centralwidget = QtWidgets.QWidget(Test202) 
     self.centralwidget.setObjectName("centralwidget") 
     self.pb = QtWidgets.QPushButton(self.centralwidget) 
     self.pb.setText('push button!') 
     Test202.setCentralWidget(self.centralwidget) 
     self.pb.clicked.connect(self.btnClicked) 
     self.retranslateUi(Test202) 
     QtCore.QMetaObject.connectSlotsByName(Test202) 

    def retranslateUi(self, Test202): 
     Test202.setWindowTitle(QtWidgets.QApplication.translate("Test202", "MainWindow", None, -1)) 

    def btnClicked(self): 
     ui = Ui_Dialog1(self) 
     ui.show() 

class Test20(QMainWindow, UI_Test20) : 

    def __init__(self, parent): 
     super(Test20, self).__init__(parent) 
     self.setupUi(self) 

und der Dialog-Code

class Ui_Dialog1(QtWidgets.QDialog): 

    def __init__(self, parent=None): 
     super(Ui_Dialog1, self).__init__(parent) 
     self.p = parent 
     self.setupUi(self) 

    def setupUi(self, Dialog1): 
     Dialog1.setObjectName("Dialog1") 
     Dialog1.resize(333, 173) 

Haupt

if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    ui = Test20(None) 
    ui.show() 
    sys.exit(app.exec_()) 

Antwort

1

Das Problem wird durch die Tatsache verursacht wird, dass das Hauptfenster der Elternteil des QDialog ist, so dass es entfernt werden muss, Ist dies jedoch der Fall, löscht der Garbage Collector das Element QDialog der Klasse:

def btnClicked(self): 
    self.ui = Ui_Dialog1() 
    self.ui.show() 

Plus-: die richtige Sache ist nicht das Design zu ändern, so dass ich die Verbindung und den Schlitz mit dem klickten Taste zugeordnet bewegen pb und wenn wir es zu schließen, wenn das Fenster geschlossen wir überschreiben die closeEvent() Methode:

class Test20(QMainWindow, UI_Test20): 
    def __init__(self, parent): 
     super(Test20, self).__init__(parent) 
     self.setupUi(self) 
     self.pb.clicked.connect(self.btnClicked) 

    def btnClicked(self): 
     self.ui = Ui_Dialog1() 
     self.ui.show() 

    def closeEvent(self, *args, **kwargs): 
     self.ui.close() 
     QMainWindow.closeEvent(self, *args, **kwargs) 
+0

Vielen Dank! eine andere Frage, ich schließe den Hauptrahmen und dieser geöffnete Dialog sollte auch schließen, soll ich Code schreiben um diloag zu schließen oder nicht? –

+0

Ja, es überschreibt die Methode closeEvent und in diesem Teil schließen Sie den Dialog – eyllanesc

+0

Danke Ich werde versuchen ~ –

Verwandte Themen