PyQt:如何退出 QDialog?

Posted

技术标签:

【中文标题】PyQt:如何退出 QDialog?【英文标题】:PyQt: How can I quit a QDialog? 【发布时间】:2010-08-23 04:11:18 【问题描述】:

我已经构建了一个 QDialog 小部件。我的问题是,我无法退出 QDialog。 如果我按下其中一个按钮,则 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()

【问题讨论】:

【参考方案1】:

要终止对话,accept 应该可以工作(至少如果您已将对话设为模态,我相信exec_ 总是这样做)。

正常的选择是reject;或者,您可以使用int 参数调用done,而不是其中一个或两个(这将成为exec_ 的结果)。

【讨论】:

感谢您的回答。但我认为 Arnold Spence 发现了这个错误。【参考方案2】:

我根本不懂 python,但看起来对话框是您的应用程序的唯一窗口。您可能想尝试使用form.show_() 而不是form.exec_() 调用对话框。后者通常用于在父窗口上模态显示对话框。

【讨论】:

哦该死的。这可能是答案。目前它是唯一的窗口,因为我仍在研究它并对其进行测试。现在我觉得有点傻。不管怎样,谢谢你的回答。

以上是关于PyQt:如何退出 QDialog?的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 控件学习(一个一个学习之QDialog)

PyQt5 组件之QDialog

PyQt 在 QMainWindow 中创建 QDialog

关闭后执行的 PyQt5 QDialog 代码

隐藏后如何重新显示QDialog?

在对话框之间切换(QDialog)PyQt5