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?的主要内容,如果未能解决你的问题,请参考以下文章