我想知道如果在__init__
声明中满足某些条件,我可以如何停止打开对话框。
下面的代码尝试调用'self.close()'函数,但是(我假设)因为对话框尚未启动它的事件循环,它不会触发close事件?那么有没有另一种方法可以在不触发事件的情况下关闭和/或停止打开对话框?
示例代码:
from PyQt4 import QtCore, QtGui
class dlg_closeInit(QtGui.QDialog):
'''
Close the dialog if a certain condition is met in the __init__ statement
'''
def __init__(self):
QtGui.QDialog.__init__(self)
self.txt_mytext = QtGui.QLineEdit('some text')
self.btn_accept = QtGui.QPushButton('Accept')
self.myLayout = QtGui.QVBoxLayout(self)
self.myLayout.addWidget(self.txt_mytext)
self.myLayout.addWidget(self.btn_accept)
self.setLayout(self.myLayout)
# Connect the button
self.connect(self.btn_accept,QtCore.SIGNAL('clicked()'), self.on_accept)
self.close()
def on_accept(self):
# Get the data...
self.mydata = self.txt_mytext.text()
self.accept()
def get_data(self):
return self.mydata
def closeEvent(self, event):
print 'Closing...'
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
dialog = dlg_closeInit()
if dialog.exec_():
print dialog.get_data()
else:
print "Failed"
答案 0 :(得分:1)
只有在调用exec_方法时才会运行该对话框。因此,您应该检查exec_方法中的条件,如果满足它们,请从QDialog运行exec_。
其他方法是在构造函数内引发异常(虽然我不确定,这是一个很好的做法;在其他语言中,你通常不应该在构造函数中允许这样的行为)并将其捕获到外部。如果你遇到异常,就不要运行exec_方法。
请记住,除非你运行exec_,否则你不需要关闭窗口。对话框已构建,但尚未显示。