【问题标题】:How to re-display a QDialog after hiding it?隐藏后如何重新显示QDialog?
【发布时间】:2013-01-09 13:56:11
【问题描述】:

我正在使用 python 和 pyqt。我有一个我想暂时隐藏的对话框。调用后

dlg.hide()

我试着打电话

dlg.show()

但什么也没发生。它永远不会重新显示。

我是 pyqt 新手,非常感谢任何帮助。

提前致谢。

【问题讨论】:

    标签: python pyqt qdialog


    【解决方案1】:

    您正在寻找使对话框模态化的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_())
    

    【讨论】:

    • 我从第一个对话开始第二个对话。所以我想从第一个对话框中隐藏它,显示第二个对话框,然后一旦被接受,再次显示第一个对话框。
    • @robert Checkout my updated answer 我修改它以在子对话框关闭后显示父对话框
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 2017-05-01
    相关资源
    最近更新 更多