2013-01-09 81 views
1

我正在使用python和pyqt。我有一個我想暫時隱藏的對話框。調用如何在隱藏後重新顯示QDialog?

dlg.hide() 

後,我嘗試調用

dlg.show() 

但沒有任何反應。它永遠不會重新顯示。

我是pyqt的新手,非常感謝您的幫助。

在此先感謝。

回答

0

您正在尋找exec_方法,使對話模式,瞭解其工作原理:

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

from PyQt4 import QtCore, QtGui 

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

     self.dialog = None 

     self.buttonShow = QtGui.QPushButton(self) 
     self.buttonShow.setText("Show Dialog") 
     self.buttonShow.clicked.connect(self.on_buttonShow_clicked) 

     self.buttonHide = QtGui.QPushButton(self) 
     self.buttonHide.setText("Close") 
     self.buttonHide.clicked.connect(self.on_buttonHide_clicked) 

     self.layout = QtGui.QVBoxLayout(self) 
     self.layout.addWidget(self.buttonShow) 
     self.layout.addWidget(self.buttonHide) 

    @QtCore.pyqtSlot() 
    def on_buttonHide_clicked(self): 
     self.accept() 

    @QtCore.pyqtSlot() 
    def on_buttonShow_clicked(self): 
     self.dialog = myDialog(self) 
     self.dialog.exec_() 

class myWindow(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(myWindow, self).__init__(parent) 

     self.buttonShow = QtGui.QPushButton(self) 
     self.buttonShow.setText("Show Dialog") 
     self.buttonShow.clicked.connect(self.on_buttonShow_clicked) 

     self.layout = QtGui.QVBoxLayout(self) 
     self.layout.addWidget(self.buttonShow) 

     self.dialog = myDialog(self) 

    @QtCore.pyqtSlot() 
    def on_buttonHide_clicked(self): 
     self.dialog.accept() 

    @QtCore.pyqtSlot() 
    def on_buttonShow_clicked(self): 
     self.dialog.exec_() 

if __name__ == "__main__": 
    import sys 

    app = QtGui.QApplication(sys.argv) 
    app.setApplicationName('myWindow') 

    main = myWindow() 
    main.show() 

    sys.exit(app.exec_()) 
+0

我發起第二次對話的第一對話。所以我想從第一個對話框中隱藏它,顯示第二個對話框,然後一旦被接受,再次顯示第一個對話框。 – robert

+0

@robert結帳我的[更新的答案](http://stackoverflow.com/a/14241258/1006989)我修改它顯示父對話框關閉子對話框後 – 2013-01-10 10:12:44

相關問題