我在Python 2.7下使用PyQt4时遇到了一些小问题
我正在写一个小项目,其中有一些QDialog互相打开。 所以有一个Dialog我打开并立即打开另一个Dialog来检查一些东西,当有错误检查时,我希望整个对话框关闭。它看起来像这样:
class MyDialog(QtGui.QDialog):
def __init__(self):
## should get me a 10 digit number input
text, ok = QtGui.QInputDialog.getText(self, u'Enter check')
if ok:
## if clicked ok, assign tID
tID = text
else:
## else close
self.close()
try:
## checker is a plausibilty check for the input
## checks, if tID is a number and 10 digits long
## and throws an IntegrityWarning if one of these conditions
## is not met
tID = self.checker.checkID(tID)
except IntegrityWarning as e:
## on exception show error dialog
errDialog = QtGui.QMessageBox()
errDialog.setWindowTitle(u'Fehler')
errDialog.setText(e.getWarning())
ok = errDialog.exec_()
if ok != True:
## close the whole dialog if user cancels
self.close()
self.tAccount = self.tControl.getAccount(tID)
所以这基本上就是我所做的,除了我在分配之前得到使用tID的Errormessage之外它工作得很好。我的程序在那之后工作得很好,但我想知道错误来自哪里。令我感到好奇的是,即使我将tAccount的最后一个赋值放入try-except:pass语句中,错误也会被抛出到控制台,而不会被传递,因为它应该是显而易见的。所以我的猜测是我不能简单地在__init__()
例程中终止程序。我尝试了一个return语句而不是close()语句,并销毁了MainWindow中调用函数中的QDialog。这使对话框显示并保持为空,就像模态一样,我必须关闭它才能在MainWindow中恢复。
有人可以告诉我为什么Dialog __init__()
在关闭后会恢复?
答案 0 :(得分:3)
这是Python的正常行为。 self.close()
不是返回语句,因此不会退出__init__
。
此外,__init__
实际上并未在屏幕上显示对话框,因此在self.close()
中撰写__init__
毫无意义。我建议重新构建代码,以便此应用程序逻辑位于__init__
之外,并根据MyDialog
和{{1}的结果决定是否初始化并显示QInputDialog
}}