2010-08-23 7 views
0

QDialog 위젯을 만들었습니다. 내 문제는 QDialog를 종료 할 수 없다는 것입니다. 버튼 중 하나를 누르면 QDialog가 "숨기기"로 설정됩니다. 다음은 코드의 일부입니다. 그것은 실행 가능합니다. 내가 뭘 잘못하고 있는지 모르겠다. 어쩌면 당신 중 하나가 말해 줄 수 있습니다.PyQt : 어떻게 QDialog를 종료 할 수 있습니까?

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

class MyClass(QDialog): 
    def __init__(self, parent=None): 
     QWidget.__init__(self, parent) 

     # init 
     # ------------------------------------------------ 
     self.setMinimumWidth(600) 
     self.setWindowTitle("Select Dingsda") 
     self.layout = QVBoxLayout() 
     self.setLayout(self.layout) 
     self.layoutWidget = QWidget(self) 
     self.liste = [] 
     # widgets and layouts 
     # ------------------------------------------------ 

     tempLayout = QHBoxLayout() 
     self.cancelButton = QPushButton("Cancel") 
     self.connect(self.cancelButton, SIGNAL('clicked()'), self.cancel) 
     self.addSelectedButton = QPushButton("Add Selected") 
     self.connect(self.addSelectedButton, SIGNAL('clicked()'), self.addSelected) 
     tempLayout.addStretch() 
     tempLayout.addWidget(self.cancelButton) 
     tempLayout.addWidget(self.addSelectedButton) 
     self.layout.addLayout(tempLayout) 

     # test-data 
     # ------------------------------------------------ 
    # methods 
    # ------------------------------------------------ 

    def cancel(self): 
     self.close() 

    def addSelected(self): 
     self.liste = ["1", "2", "3", "4", "5"] 
     self.accept() 


    def exec_(self): 
     if QDialog.exec_(self) == QDialog.Accepted: 
      return self.liste 
     else: 
      return [] 

def test():  
    app = QApplication([""]) 
    form = MyClass() 
    i = form.exec_() 
    print i 
    sys.exit(app.exec_()) 
#------------------------------------------------------------------------------- 
# main 
#------------------------------------------------------------------------------- 
if __name__ == "__main__": 
    test() 

답변

2

저는 파이썬을 전혀 알지 못합니다. 그러나 대화 상자가 앱용 유일한 창인 것처럼 보입니다. form.exec_() 대신 form.show_()을 사용하여 대화 상자를 호출 해보십시오. 후자는 일반적으로 상위 창 위에 모달로 대화 상자를 표시하는 데 사용됩니다.

+0

오, 젠장. 그 대답 일 수 있습니다. 지금은 유일한 창문입니다. 아직 작업 중이며 테스트 중이기 때문입니다. 이제 나는 어리 석다. 어쨌든 답변 해 주셔서 감사합니다. – user427305

3

대화 상자를 종료하려면 accept이 작동해야합니다 (적어도 대화 상자를 모달로 만든 경우라면 exec_은 항상 그렇습니다).

정상적인 대안은 reject입니다. 또는 둘 중 하나 또는 둘 대신에 매개 변수 (exec_의 결과가 됨)와 함께 done을 호출 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 하지만 Arnold Spence가 버그를 발견했다고 생각합니다. – user427305

관련 문제