隐藏后如何重新显示QDialog?

Posted

技术标签:

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

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

dlg.hide()

我试着打电话

dlg.show()

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

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

提前致谢。

【问题讨论】:

【参考方案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 我修改它以在子对话框关闭后显示父对话框

以上是关于隐藏后如何重新显示QDialog?的主要内容,如果未能解决你的问题,请参考以下文章

如何从QDialog刷新/更新/重绘QMainWindow?

PyQt5 QDialog隐藏问号按钮

PyQt - 隐藏 MainWindow 并显示 QDialog 而不会消失任务栏图标

阻止和隐藏 QDialog:exec_() 的替代方案?

QT 设置QDialog显示与隐藏系统按钮(最大小化等)

QT 设置QDialog显示与隐藏系统按钮(最大小化等)