2012-01-31 2 views
2

사용자가 단추를 클릭 할 때 대화 팝업을 표시하는 방법을 알아야합니다.Python (PyQt4)에서 팝업 창 표시

저는 Python과 PyQt/QtDesigner에 비교적 새로운 기능이 있습니다. 나는 단지 약 1 개월 동안 그것들을 사용하고 있었지만, 나는 좋은 생각을 가지고 있다고 생각한다.

다음은 내가 갖고있는 것입니다. QtDesigner에서 디자인 한 기본 대화 상자 (응용 프로그램의 주요 부분)입니다. 저는 pyuic4easy를 사용하여 .ui를 .py로 변환했습니다.

내가하고 싶은 일은 다음과 같습니다. QtDesigner에 새 대화 상자를 디자인하고 사용자가 첫 번째 (기본) 대화 상자의 버튼을 클릭 할 때 팝업되게합니다.

import sys 
from PyQt4.QtCore import * 
from loginScreen import * 


class MyForm(QtGui.QDialog): 

    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.ui = Ui_Dialog() 
     self.ui.setupUi(self) 
     QtCore.QObject.connect(self.ui.pushButton, QtCore.SIGNAL('clicked()'), self.popup)  
     ... 

     ... Some functions ... 

    def popup(self): 
     #Pop-up the new dialog 

if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    myapp= MyForm() 
    myapp.show() 
    sys.exit(app.exec_()) 
그래서

당신이 볼 수 있듯이, 내가 만드는 코드로 채워해야 '팝업'라는 이름의 방법으로 첫 번째 단추를 연결 한 다음은

내 주 대화의 코드입니다 내 두 번째 창이 튀어 오릅니다. 어떻게해야합니까? QtDesigner에서 이미 두 번째 대화 상자를 디자인 했으므로 새 대화 상자를 만들 필요는 없습니다.

모든 도움에 감사드립니다! 당신이 볼 수있는

답변

8

그래서, 난 내 두 번째 윈도우가 팝업을 만드는 코드에 작성 될 필요가있는 방법이라는 '팝업'에 첫 번째 버튼을 연결했습니다. 어떻게해야합니까?

주 창 (MyForm)과 거의 같은 방식으로 작업합니다.

평상시처럼, MyForm과 같이 두 번째 대화 상자에 대한 QtDesigner 코드의 래퍼 클래스를 작성합니다. MyPopupDialog이라고합시다. 그런 다음 popup 메서드에서 인스턴스를 만든 다음 모달 또는 모덜리스 대화 상자를 사용할지 여부에 따라 exec_() 또는 show() 인스턴스를 표시합니다.

# Necessary imports 

class MyPopupDialog(QtGui.QDialog): 
    def __init__(self, parent=None): 
     # Regular init stuff... 
     # and other things you might want 


class MyForm(QtGui.QDialog): 
    def __init__(self, parent=None): 
     # Here, you should call the inherited class' init, which is QDialog 
     QtGui.QDialog.__init__(self, parent) 

     # Usual setup stuff 
     self.ui = Ui_Dialog() 
     self.ui.setupUi(self) 

     # Use new style signal/slots 
     self.ui.pushButton.clicked.connect(self.popup)  

     # Other things... 

    def popup(self): 
     self.dialog = MyPopupDialog() 

     # For Modal dialogs 
     self.dialog.exec_() 

     # Or for modeless dialogs 
     # self.dialog.show() 

if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    myapp= MyForm() 
    myapp.show() 
    sys.exit(app.exec_()) 
+0

당신은 유지하는 것을 잊었다 : 그래서 전반적인 것은 (수정의 부부와 함께) 다음과 같을 수

(당신이 모달/모덜리스 개념에 익숙하지 않은 경우, 당신은 documentation. 참조 수) 대화 상자를'show()'할 때 참조하십시오. – ekhumoro

+0

아 맞아. 결정된. 감사합니다 – Avaris

+0

감사합니다 Avaris! 팝업 디스플레이를 만들 수 있었지만 팝업 된 대화 상자와 내용이 같습니다. 어떻게 수정해야합니까? 또한, 새로 팝업 된 창을 PyQt로 디자인 할 수 있으며 대신 내 코드를 팝업으로 표시 할 수 있습니까? 이 내 코드는 새로운 대화를 위해, 모습입니다 : '클래스에 MyPopup (QtGui.QDialog) : 데프 __init __ (자기 부모 = 없음) : QtGui.QDialog .__의 init __ (자기 부모) 자기. ui = Ui_Dialog() self.ui.setupUi (self) ' – user1179452