2016-12-07 2 views
0

이 간단한 프로그램이 있습니다. 그 버튼이 있고 그것을 누르면 두 번째 창이 나타납니다.pyqt4 두 번째 창이 닫히면 주 창이 닫힙니다

from PyQt4.QtCore import * 
    from PyQt4.QtGui import * 
    import sys 

    import urllib.request 

    class second_window(QDialog): 
     def __init__(self, parent=None): 
      QDialog.__init__(self) 
      super(second_window, self).__init__(parent) 

      layout = QVBoxLayout() 

      button = QPushButton("close") 

      button.clicked.connect(self.button_clicked) 

      layout.addWidget(button) 
      self.setLayout(layout) 
     def button_clicked(self): 
      self.close() 

    class Main_window(QDialog): 

     def __init__(self): 
      QDialog.__init__(self) 
      layout = QVBoxLayout() 

      button = QPushButton("Second Window") 
      self.sec_window = second_window(self) 

      layout.addWidget(button) 

      button.clicked.connect(self.button_clicked) 

      self.setLayout(layout) 

     def button_clicked(self): 
      self.sec_window.exec_() 
    if __name__ == "__main__": 
     app = QApplication(sys.argv) 
     dl = window() 
     dl.show() 
     app.exec() 

하지만 당신은 당신이 충돌합니다 second_window을 닫고 나가 "python.exe를 작동이 중지되었습니다"라는 메시지를 얻으려면, 그 후 Main_window을 닫습니다 가끔합니다. 누구든지 도와 드릴 수 있습니까?

답변

1

먼저 해결 : second_windowMain_window 사이에 관계가 없기 때문에 청소 할 필요가 없기 때문 self.sec_window = second_window()self.sec_window = second_window(self)을 변경합니다. 다음 코드와 같이

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
import sys 


class second_window(QDialog): 
    def __init__(self, parent=None): 
     QDialog.__init__(self) 
     super(second_window, self).__init__(parent) 

     layout = QVBoxLayout() 

     button = QPushButton("close") 

     button.clicked.connect(self.button_clicked) 

     layout.addWidget(button) 
     self.setLayout(layout) 

    def button_clicked(self): 
     self.close() 


class Main_window(QDialog): 
    def __init__(self): 
     QDialog.__init__(self) 
     layout = QVBoxLayout() 

     button = QPushButton("Second Window") 
     self.sec_window = second_window() 

     layout.addWidget(button) 

     button.clicked.connect(self.button_clicked) 

     self.setLayout(layout) 

    def button_clicked(self): 
     self.sec_window.exec_() 



if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    dl = Main_window() 
    dl.show() 
    app.exec() 

두 번째 솔루션 : 삭제 할 수 closeEvent(self, event)self.sec_window.deleteLater() 추가 second_window

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
import sys 


class second_window(QDialog): 
    def __init__(self, parent=None): 
     QDialog.__init__(self) 
     super(second_window, self).__init__(parent) 

     layout = QVBoxLayout() 

     button = QPushButton("close") 

     button.clicked.connect(self.button_clicked) 

     layout.addWidget(button) 
     self.setLayout(layout) 

    def button_clicked(self): 
     self.close() 


class Main_window(QDialog): 
    def __init__(self): 
     QDialog.__init__(self) 
     layout = QVBoxLayout() 

     button = QPushButton("Second Window") 
     self.sec_window = second_window(self) 

     layout.addWidget(button) 

     button.clicked.connect(self.button_clicked) 

     self.setLayout(layout) 

    def button_clicked(self): 
     self.sec_window.exec_() 

    def closeEvent(self, event): 
     self.sec_window.deleteLater() 
     super().closeEvent(event) 



if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    dl = Main_window() 
    dl.show() 
    app.exec()